Nico R.: Array wird in JS nach JSON-Umwandlung zu Objekt

Beitrag lesen

Hallo Felix,

…nicht als numerische Strings, sondern als echte Integer-Werte kodieren:

[0:[347,[1:[10,0]]],1:[344,[1:[20,1],2:[30,0]]],3:[338,[1:[30,0]]]]

So hatte ich mir das auch vorgestellt.

Da ich nicht weiß, wie Du Dein Array überhaupt erstellst, weiß ich nicht, was json_encode als Daten zur Verarbeitung erhält. Aber genau da sollte die Ursache für Dein Problem liegen.

Es ist ein Array, das ich per $toreArray = [] erzeuge und dann mit Daten aus MySQL fülle. Wenn ich das Array per var_dump anzeige, sieht das so aus:

array(3) {
  [0]=>
  array(2) {
    [0]=>
    int(347)
    [1]=>
    array(1) {
      [1]=>
      array(2) {
        [0]=>
        int(10)
        [1]=>
        int(0)
      }
    }
  }
  [1]=>
  array(2) {
    [0]=>
    int(344)
    [1]=>
    array(2) {
      [1]=>
      array(2) {
        [0]=>
        int(20)
        [1]=>
        int(1)
      }
      [2]=>
      array(2) {
        [0]=>
        int(30)
        [1]=>
        int(0)
      }
    }
  }
  [3]=>
  array(2) {
    [0]=>
    int(338)
    [1]=>
    array(1) {
      [1]=>
      array(2) {
        [0]=>
        int(30)
        [1]=>
        int(0)
      }
    }
  }
}

Ohne weitere Zwischenschritte ist die direkt folgende Ausgabe per json_encode() folgende:

"{"0":[347,{"1":[10,0]}],"1":[344,{"1":[20,1],"2":[30,0]}],"3":[338,{"1":[30,0]}]}"

Von den optionalen Parametern auf https://www.php.net/manual/en/function.json-encode.php sieht JSON_OBJECT_AS_ARRAY aus, als würde es machen, was ich will. Aber auch mit json_encode($toreArray, JSON_OBJECT_AS_ARRAY) bleibt der JSON-String unverändert.

Schöne Grüße

Nico