RSS Feed

Vorsicht: PHP json_encode und numerische Arrays

23.12.2011 by naden

Auf den ersten Blick liefert die -Funktion _encode ein unerwartetes Ergebnis, wenn man ein Array mit numerischen Indizes umwandelt.

#1 fortlaufenden, numerische Indizes 0, 1 und 2

1
$a = array(5, 6, 7);

echo json_encode($a);

#1 Ausgabe: Array sieht wie erwartet aus

1
[5,6,7]

#2 Index beginnt bei 2

1
$b = array(2 => 'a', 'b', 'c');

echo json_encode($b);

#2 Ausgabe ist kein Array, sondern ein Objekt

1
{"2":"a","3":"b","4":"c"}

#3 Index beginnt bei 0 und macht dann einen Sprung auf 20

1
$c = array(5, 20 => 6);

echo json_encode($c);

#3 Ausgabe ist kein Array, sondern ein Objekt

1
{"0":5,"20":6}

Unerwartet aber es macht natürlich Sinn. Javascript kennt keine associativen Arrays, sondern nur fortlaufend nummerierte.

“Associative Arrays” werden in Javascript als Objekte abgebildet, da ist ist es von json_encode natürlich richtig, in diesem Fall so zu verfahren.

Teile diesen Beitrag

Folge mir

TwitterGoogle+XingFacebookRSS-Feed

Ähnliche Beiträge


2 Kommentare »

  1. Yann sagt:

    Falls auch numerische Arrays als Objekt ausgegeben werden sollen:
    $a = array(5, 6, 7);
    json_enode($a,JSON_FORCE_OBJECT);

  2. naden sagt:

    Guter Hinweis! Es lohnt sich immer periodisch die optionalen Parameter der PHP-Funktionen nachzuschauen. Oft schieben die bei Minor-Updates echte Schätze mit rein. Letztens erst wieder bei file_(get|put)_content entdeckt.

Hinterlasse eine Antwort

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *

Du kannst folgende HTML-Tags benutzen: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>