json_encode разреженный массив PHP как массив JSON, а не объект JSON

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