У меня есть следующий массив в PHP:
Array ( [0] => Array ( [id] => 0 [name] => name1 [short_name] => n1 ) [2] => Array ( [id] => 2 [name] => name2 [short_name] => n2 ) )
Я хочу, чтобы JSON закодировал его как массив JSON, создав строку, такую как:
[ { "id":0, "name":"name1", "short_name":"n1" }, { "id":2, "name":"name2", "short_name":"n2" } ]
Но когда я вызываю json_encode
в этом массиве, я получаю следующее:
{ "0":{ "id":0, "name":"name1", "short_name":"n1" }, "2":{ "id":2, "name":"name2", "short_name":"n2" } }
который является объектом вместо массива.
Как я могу получить json_encode
для кодирования моего массива как массива?
Вы наблюдаете это поведение, потому что ваш массив не является последовательным – он имеет ключи 0
и 2
, но не имеет 1
в качестве ключа.
Просто иметь числовые индексы недостаточно. json_encode
будет кодировать ваш массив PHP только как массив JSON, если ваш PHP-массив является последовательным, то есть, если его ключи равны 0, 1, 2, 3, …
Вы можете повторно проиндексировать ваш массив последовательно, используя функцию array_values
чтобы получить array_values
поведение. Например, приведенный ниже код успешно работает в вашем случае использования:
echo json_encode(array_values($input)).
Array
в JSON
является только индексированным массивом, поэтому структура, которую вы пытаетесь получить, недействительна Json / Javascript.
Массив PHP-массивов – это объекты в JSON, поэтому, если вам не нужен индекс, вы не можете делать такие преобразования.
Если вы хотите получить такую структуру, вы можете сделать:
$indexedOnly = array(); foreach ($associative as $row) { $indexedOnly[] = array_values($row); } json_encode($indexedOnly);
Вернет что-то вроде:
[ [0, "name1", "n1"], [1, "name2", "n2"], ]
json_decode ($ jsondata, true);
true превращает все свойства в массив (последовательный или нет)
Попробуй это,
<?php $arr1=array('result1'=>'abcd','result2'=>'efg'); $arr2=array('result1'=>'hijk','result2'=>'lmn'); $arr3=array($arr1,$arr2); print (json_encode($arr3)); ?>