PHP encode JSON (2 dimensional array)

15,222

PHP's json_encode() uses a certain amount of magic to determine whether a given vector is encoded as a JSON object or an array, but the simple rule is this: If the array has contiguous, zero-indexed, numeric keys, it will be encoded as an array. Any other vector (object or associative array) will be encoded as an object.

Because you are using odbc_fetch_array(), your result rows are returned as an associative array with the keys being the column names. To get the result you want you have 3 options:

Pass the result rows through array_values():

$json[] = array_values($row);

Manually construct the individual arrays:

$json[] = array($row['message_type'], $row['percentage']);

Or probably the best option is to use odbc_fetch_row() instead, which will return indexed arrays straight away:

while ($row = odbc_fetch_row($rs)) {
    $json[] = $row;
}
Share:
15,222
meda
Author by

meda

Updated on June 08, 2022

Comments

  • meda
    meda almost 2 years

    I am querying a table that return to fields(message_type & percentage). I use PHP to encode the json data, here is how i do it

    $json = array();
    while ($row = odbc_fetch_array($rs)) {
      $json[][] = $row;
    }
    echo json_encode($json);
    

    output :

    [ [ { "message_type" : "bullying",
          "percentage" : "60"
        } ],
      [ { "message_type" : "cheating",
          "percentage" : " 14"
        } ],
      [ { "message_type" : "Stress",
          "percentage" : "16"
        } ],
      [ { "message_type" : "Gang",
          "percentage" : "7"
        } ]
    ]
    

    As you can see json_encode function is adding curly braces, quotes and the object key name.

    What I want is to parse the json as two dimensional array only, here is the desired output:

    [
      ["bullying", 60],
      ["harrassment", 9],
      ["cheating", 14],
      ["Stress", 16],
      ["Gang", 7]
    ]
    

    I also tried to encode it manually but I could not get the result I need.