"{}" Klammern spezifizieren ein Objekt und "[]" werden für Arrays gemäß der JSON-Spezifikation verwendet. Arrays haben keine Enumeration, wenn Sie sie aus der Perspektive der Speicherzuweisung betrachten. Es sind nur Daten gefolgt von mehr Daten, Objekte aus der anderen Hand haben Eigenschaften mit Namen und die Daten werden den Eigenschaften zugewiesen, daher müssen Sie, um ein solches Objekt zu codieren, auch die richtigen Eigenschaftsnamen übergeben. Aber für Array müssen Sie die Indizes nicht angeben, weil sie immer 0..n sein werden, wobei n die Länge des Arrays ist - 1, die einzige Sache, die zählt, ist die Reihenfolge der Daten.
%Vor%Der Grund, warum JSON_FORCE_OBJECT die Verwendung von "0,1,2" vorschreibt, liegt darin, dass die Zuweisung von Daten zu object einer Eigenschaft zugewiesen werden muss, da keine Eigenschaftsnamen vom Entwickler angegeben werden (nur die Daten) Indizes als Eigenschaftsnamen, da dies die einzigen Namen sind, die einen Sinn ergeben.
Hinweis: Laut PHP-Handbuch sind die Optionen nur in PHP 5.3 verfügbar.
Ältere PHP-Versionen finden Sie in der Antwort von chelmertz für eine Möglichkeit, json_encode für die Verwendung von Indizes zu verwenden.
Ich persönlich denke, das ist ein Bug, der in PHP behoben werden muss. JSON_FORCE_OBJECT ist absolut keine Antwort. Wenn Sie versuchen, irgendeine Art von generischer Programmierung zu machen, werden Sie ständig stolpern. Zum Beispiel ist folgendes PHP gültig:
Array ("0" = & gt; Array (0,1,2,3), "1" = & gt; Array (4,5,6,7));
Und sollte in
konvertiert werden{"0": [0,1,2,3], "1": [4,5,6,7]}
Aber PHP erwartet, dass ich entweder
akzeptiere[[0,1,2,3], [4,5,6,7]]
oder
{0: {0: 1, 1: 1, 2: 2, 3: 3}, 1: {0: 4, 1: 5 , "2": 6, "3": 7}}
Keine von beiden ist richtig. Wie kann ich ein Objekt so dekodieren? Welchen möglichen Grund gibt es, jemals etwas zu ändern, das eindeutig Zeichenfolgen als Indizes verwendet? Es ist, als ob PHP clever wäre, um idiotischen Leuten zu helfen, die Strings nicht von Ints unterscheiden können, aber dabei irgendjemanden, der legitimerweise Strings als Index verwendet, durcheinander bringt, ungeachtet dessen, in welchen Wert der Wert umgewandelt werden könnte.