json_encode spärliches PHP-Array als JSON-Array, nicht als JSON-Objekt

Ich habe das folgende Array in PHP:

Array ( [0] => Array ( [id] => 0 [name] => name1 [short_name] => n1 ) [2] => Array ( [id] => 2 [name] => name2 [short_name] => n2 ) ) 

Ich möchte JSON als JSON-Array codieren, um eine Zeichenfolge wie die folgende zu erzeugen:

 [ { "id":0, "name":"name1", "short_name":"n1" }, { "id":2, "name":"name2", "short_name":"n2" } ] 

Aber wenn ich json_encode auf diesem Array json_encode , bekomme ich Folgendes:

 { "0":{ "id":0, "name":"name1", "short_name":"n1" }, "2":{ "id":2, "name":"name2", "short_name":"n2" } } 

Das ist ein Objekt anstelle eines Arrays.

Wie kann ich json_encode dazu bringen, mein Array als Array zu codieren?

   

Sie beobachten dieses Verhalten, weil Ihr Array nicht sequenziell ist – es hat die Schlüssel 0 und 2 , aber nicht 1 als Schlüssel.

Nur numerische Indizes sind nicht genug. json_encode wird Ihr PHP-Array nur als JSON-Array codieren, wenn Ihr PHP-Array sequentiell ist – json_encode wenn die Schlüssel 0, 1, 2, 3, … sind.

Sie können Ihr Array mit der function array_values ​​sequenziell neu array_values , um das gewünschte Verhalten zu erhalten. Zum Beispiel funktioniert der folgende Code in Ihrem Anwendungsfall erfolgreich:

 echo json_encode(array_values($input)). 

Array in JSON sind nur indizierte Arrays, daher ist die Struktur, die Sie erhalten möchten, kein gültiges JSON / Javascript.

PHP Associates-Arrays sind Objekte in JSON. Wenn Sie also den Index nicht benötigen, können Sie solche Konvertierungen nicht durchführen.

Wenn Sie eine solche Struktur erhalten möchten, können Sie Folgendes tun:

 $indexedOnly = array(); foreach ($associative as $row) { $indexedOnly[] = array_values($row); } json_encode($indexedOnly); 

Will gibt etwas zurück wie:

 [ [0, "name1", "n1"], [1, "name2", "n2"], ] 

json_decode ($ jsondata, wahr);

true stellt alle Eigenschaften auf array (sequenziell oder nicht)

Versuche dies,

 < ?php $arr1=array('result1'=>'abcd','result2'=>'efg'); $arr2=array('result1'=>'hijk','result2'=>'lmn'); $arr3=array($arr1,$arr2); print (json_encode($arr3)); ?>