Ich habe ein Array codiert, das ich mit der eingebauten json_encode();
Funktion erstellt habe. Ich brauche es im Format eines Arrays von Arrays wie folgt:
[["Afghanistan",32,12],["Albania",32,12]]
Es kehrt jedoch zurück als:
["2":["Afghanistan",32,12],"4":["Albania",32,12]]
Wie kann ich diese Zeilennummern entfernen, ohne Regex-Tricks anzuwenden?
["2":["Afghanistan",32,12],"4":["Albania",32,12]]
ist nicht einmal gültig JSON, also bezweifle ich, dass Sie das bekommen. Wenn Ihr Array der obersten Ebene assoziativ ist, rufen Sie einfacharray_values()
auf, um aufeinanderfolgende indizierte Elemente abzurufen.Antworten:
Wenn die Array-Schlüssel in Ihrem PHP-Array keine fortlaufenden Zahlen sind,
json_encode()
muss das andere Konstrukt ein Objekt sein, da JavaScript-Arrays immer fortlaufend numerisch indiziert werden.Verwenden Sie
array_values()
die äußere Struktur in PHP, um die ursprünglichen Array-Schlüssel zu verwerfen und durch eine auf Null basierende fortlaufende Nummerierung zu ersetzen:Beispiel:
// Non-consecutive 3number keys are OK for PHP // but not for a JavaScript array $array = array( 2 => array("Afghanistan", 32, 13), 4 => array("Albania", 32, 12) ); // array_values() removes the original keys and replaces // with plain consecutive numbers $out = array_values($array); json_encode($out); // [["Afghanistan", 32, 13], ["Albania", 32, 12]]
quelle
json_encode()
wird{}
eher ein Objekt als ein Array erzeugt,[]
da JavaScript / JSON keine andere Möglichkeit hat, eine solche Struktur darzustellen. Aber ja, Sie können die Schlüssel entfernen,array_keys()
wenn sie in der resultierenden JSON-Zeichenfolge nicht benötigt werden.mysqli_fetch_assoc
und dannarray_values
... Ich frage mich, ob dies der performanteste Weg ist, um echte Arrays mit viel zu erhalten von Daten ... sollte ich meine Gewohnheit umschreibenjson_encode
? Was ist Ihre (geschätzte) Meinung dazu?array_*()
sind alle Funktionen von PHP sehr effizient. In einem kleinen Array bevorzuge ich im Allgemeinen die Verwendung einiger Array_ * -Funktionen mit einer Aktion, wenn ich Schleifen vermeiden kann. Wenn Ihr mysqli_result jedoch groß ist, möchten Sie möglicherweise nicht alles auf einmal in ein Array kompilieren und dann aufrufenarray_values()
. Stattdessen ist es möglicherweise besser, beim Abrufen Zeilen an ein Array anzuhängen. Alle Spekulationen, weil ich nicht weiß, wie Ihr Code aussieht.Mit der Funktion json_encode () können Sie das Array in PHP in JSON codieren .
Wenn Sie nur die Funktion json_encode direkt ohne eine bestimmte Option verwenden, wird ein Array zurückgegeben. Wie oben erwähnt
$array = array( 2 => array("Afghanistan",32,13), 4 => array("Albania",32,12) ); $out = array_values($array); json_encode($out); // [["Afghanistan",32,13],["Albania",32,12]]
Da Sie versuchen, Array in JSON zu konvertieren, würde ich vorschlagen, JSON_FORCE_OBJECT als zusätzliche Option (Parameter) in json_encode zu verwenden , wie unten
<?php $array=['apple','orange','banana','strawberry']; echo json_encode($array, JSON_FORCE_OBJECT); // {"0":"apple","1":"orange","2":"banana","3":"strawberry"} ?>
quelle
Ich möchte Michael Berkowskis Antwort hinzufügen, dass dies auch passieren kann, wenn die Reihenfolge des Arrays umgekehrt wird. In diesem Fall ist es etwas schwieriger, das Problem zu beobachten, da die Reihenfolge im json-Objekt aufsteigend angeordnet wird.
Zum Beispiel:
[ 3 => 'a', 2 => 'b', 1 => 'c', 0 => 'd' ]
Wird zurückkehren:
{ 0: 'd', 1: 'c', 2: 'b', 3: 'a' }
In diesem Fall besteht die Lösung darin, sie
array_reverse
vor dem Codieren in json zu verwendenquelle
array_values
von @Michael Berkowski geschriebene Lösung ist universeller und funktioniert auch in Ihrem Fall.Wenn Sie in Ihrem ursprünglichen Array keine Indizes angeben, erhalten Sie die regulären numerischen Indizes. Arrays müssen einen eindeutigen Index haben
quelle
Eine häufige Verwendung von JSON besteht darin, Daten von einem Webserver zu lesen und die Daten auf einer Webseite anzuzeigen.
In diesem Kapitel erfahren Sie, wie Sie JSON-Daten zwischen dem Client und einem PHP-Server austauschen.
PHP verfügt über einige integrierte Funktionen für JSON.
Objekte in PHP können mithilfe der PHP-Funktion json_encode () in JSON konvertiert werden:
<?php $myObj->name = "John"; $myObj->age = 30; $myObj->city = "New York"; $myJSON = json_encode($myObj); echo $myJSON; ?>
quelle
Ich hatte ein Problem mit Zeichen mit Akzent beim Konvertieren eines PHP-Arrays in JSON. Ich habe überall UTF-8-Zeug platziert, aber nichts hat mein Problem gelöst, bis ich diesen Code in meine PHP-while-Schleife eingefügt habe, in der ich das Array gepusht habe:
$es_words[] = array(utf8_encode("$word"),"$alpha","$audio");
Es war nur die Variable '$ word', die ein Problem verursachte. Danach hat es einen jason_encode kein Problem gemacht.
hoffentlich hilft das
quelle