JSON_ENCODE eines mehrdimensionalen Arrays mit unterschiedlichen Ergebnissen
JSON_ENCODE ist eine Funktion, die eine PHP-Datenstruktur, wie z.B. ein Array, in einen JSON (JavaScript Object Notation)-String umwandelt. Beim Enkodieren eines mehrdimensionalen Arrays wandelt die Funktion jin Unter-Array in ein JSON-Objekt um.
Zum Beispiel betrachten Sie das folgende PHP-Array:
<?php
$data = [
"name" => "John Doe",
"address" => [
"street" => "123 Main St",
"city" => "Anytown",
"state" => "CA",
"zip" => "12345",
],
"phone numbers" => [
"home" => "555-555-5555",
"work" => "555-555-5556",
],
];
Wenn Sie json_encode für dieses Array verwenden, wird eine JSON-Zeichenfolge zurückgegeben:
<?php
$data = array(
"name" => "John Doe",
"address" => array(
"street" => "123 Main St",
"city" => "Anytown",
"state" => "CA",
"zip" => "12345"
),
"phone numbers" => array(
"home" => "555-555-5555",
"work" => "555-555-5556"
)
);
$json = json_encode($data);
echo $json;
Nach dem Ausführen des Codes sehen Sie, dass die Subarrays „Adresse“ und „Telefonnummern“ in JSON-Objekte umgewandelt wurden.
Es ist wichtig zu beachten, dass json_encode nur Arrays konvertiert, die "indiziert" sind (d.h. numerische Schlüssel haben), in JSON-Arrays. Assoziative Arrays (d.h. Arrays mit String-Schlüsseln) werden als Objekte codiert.
Außerdem hat json_encode einige Optionen, die als zweiter Argument übergeben werden können, wie z.B. JSON_PRETTY_PRINT, JSON_UNESCAPED_SLASHES, JSON_NUMERIC_CHECK, JSON_FORCE_OBJECT, JSON_UNESCAPED_UNICODE und etc.
zum Beispiel, mit JSON_PRETTY_PRINT wird der codierte json-String lesbarer:
<?php
$data = [
"name" => "John Doe",
"address" => [
"street" => "123 Main St",
"city" => "Anytown",
"state" => "CA",
"zip" => "12345",
],
"phone numbers" => [
"home" => "555-555-5555",
"work" => "555-555-5556",
],
];
$json = json_encode($data, JSON_PRETTY_PRINT);
echo $json;
wird ausgeben:
{ "name": "John Doe", "address": { "street": "123 Main St", "city": "Anytown", "state": "CA", "zip": "12345" }, "phone numbers": { "home": "555-555-5555", "work": "555-555-5556" } }