Das Codieren eines Objekts als nicht assoziatives Array ist eine verlustreiche Operation. Die Objekteigenschaftsnamen/Array-Schlüssel sind verloren gegangen. Aus diesem Grund bietet json_encode()
keine Möglichkeit, ein Objekt als nicht assoziatives Array zu codieren.
Seit PHP 5.4 kann Ihre Klasse die JsonSerializable
Schnittstelle implementieren. Die von dieser Schnittstelle deklarierte Methode (jsonSerialize()
) wird von json_encode()
aufgerufen und gibt die Objektdaten zurück, die in die von json_encode()
erzeugte Textdarstellung eingegeben werden müssen.
Wenn Sie nur die Werte von Eigenschaften eines Objekts (ohne die Eigenschaftsnamen) kodieren möchten, können Sie es wie folgt implementieren:
class MyClass implements JsonSerializable
{
public function jsonSerialize()
{
return array_values((array)$this);
}
}
Bitte beachten Sie, dass Sie nicht in der Lage sein wird, um das Objekt zu restaurieren (Verwendung von json_decode()
) von der Ausgabe von json_encode()
, weil einige Informationen während der Codierung verloren gingen (die Namen der Eigenschaften).
Würde etwas wie 'json_encode (array_values ($ ar))' Ihren Bedürfnissen entsprechen? –
Wenn Sie nicht JSON_FORCE_OBJECT Flag sagen, wird nicht assoziative Array als Array – splash58
@JonStirling Es hat nicht funktioniert. Ich werde versuchen, ein Codebeispiel zu erstellen und zu der Frage hinzuzufügen. – Dorad