У меня есть следующий массив в 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)); ?>