How to add square braces around subarray data inside of a json encoded string?

Solution 1:

You need to wrap things in another array:

$data = array("item" => array(array("id" => "123456", "name" => "adam")));

This will be more understandable if we use the equivalent PHP 5.4 array syntax:

$data = [ "item" => [ ["id" => "123456", "name" => "adam"] ] ];

Compare this with the JSON:

        { "item":   [ {"id":"123456", "name":"adam"      } ] }

The only thing to explain is why one of the PHP arrays remains an array [] in JSON while the other two get converted to an object {}. But the documentation already does so:

When encoding an array, if the keys are not a continuous numeric sequence starting from 0, all keys are encoded as strings, and specified explicitly for each key-value pair.

Solution 2:

Before reading this post, I had this:

echo json_encode($data);

After reading this post:

echo json_encode(array($data));

Brackets appeared at the start and end of the JSON object.

Solution 3:

It become handy when using this way, so you can add more items on the array

$val = array();
$val["id"]="123456";
$val["name"]="adam";

$data = array();
$data["item"][]=$val;

echo json_encode($data);

And it will ouput below:

{"item":[{"id":"123456", "name":"adam"}]}