Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] json_encode macht aus einer Array ein Object

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [Erledigt] json_encode macht aus einer Array ein Object

    Hallo!
    ich stehe vor folgendem Problem, und hoffe mir kann jemand weiterhelfen:

    Ich habe ein NestedSets Model geschrieben und probiere diese Daten nun mit Javascript abzureifen (JSON), doch bevor ich das tun wollte fiel mir auf das PHP aus einer Array worin sich Objekte befinden selbst ein Objekt macht.
    Alle anderen Arrays worin sich nun keine Objekte befinden bleiben komischerweise Arrays.

    Der Baum:
    Code:
    Array
    (
        [Mangas] => CC\Tree\TreeObject Object
            (
                [id] => 2
                [name] => Mangas
                [childs] => Array
                    (
                    )
    
            )
    
        [Bilder] => CC\Tree\TreeObject Object
            (
                [id] => 3
                [name] => Bilder
                [childs] => Array
                    (
                    )
    
            )
    
        [Videos] => CC\Tree\TreeObject Object
            (
                [id] => 4
                [name] => Videos
                [childs] => Array
                    (
                        [Serien] => CC\Tree\TreeObject Object
                            (
                                [id] => 5
                                [name] => Serien
                                [childs] => Array
                                    (
                                    )
    
                            )
    
                        [Filme] => CC\Tree\TreeObject Object
                            (
                                [id] => 6
                                [name] => Filme
                                [childs] => Array
                                    (
                                    )
    
                            )
    
                    )
    
            )
    
        [Dokumente] => CC\Tree\TreeObject Object
            (
                [id] => 7
                [name] => Dokumente
                [childs] => Array
                    (
                    )
    
            )
    
        [Anderes] => CC\Tree\TreeObject Object
            (
                [id] => 8
                [name] => Anderes
                [childs] => Array
                    (
                    )
    
            )
    
    )
    Nun ist beim Knoten Videos.childs eine Array mit zwei Objekten.
    nutze ich nun json_encode werden die Child Arrays mit Inhalt zu Objekten und die leergebliebenen bleiben Arrays.

    JSON:
    Code:
    {"Mangas":{"id":2,"name":"Mangas","childs":[]},"Bilder":{"id":3,"name":"Bilder","childs":[]},"Videos":{"id":4,"name":"Videos","childs":{"Serien":{"id":5,"name":"Serien","childs":[]},"Filme":{"id":6,"name":"Filme","childs":[]}}},"Dokumente":{"id":7,"name":"Dokumente","childs":[]},"Anderes":{"id":8,"name":"Anderes","childs":[]}}
    Mit json_encode lässt sich ja nicht viel verkehrt machen, ich schaffe es trotzdem irgendwie

    Vielen Dank im voraus!


  • #2
    Weil es in Javascript (JSON) keine assoziativen Arrays gibt.
    --

    „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
    Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


    --

    Kommentar


    • #3
      Es mag zwar so aussehen als gäbe es unter JavaScript assoziative Arrays, aber dem ist - wie nikosch bereits schrieb - nicht so. Dabei ist es wichtig zu erwähnen, dass die Eigenschaften eines JavaScript-Objekts sich zwar ähnlich den Einträgen eines Arrays (oder eines assoziativen Arrays unter PHP) ansprechen lassen (sowohl mittels [] als auch "."-Notation), die Reihenfolge bspw. bei einer for..in-Schleife allerdings nicht garantiert wird (zumindest laut Spezifikation). Aus diesem Grund ist es generell ratsam auf numerische Arrays zurückzugreifen, wenn die Reihenfolge für einen Anwendungsfall eine Rolle spielt. In ganz wilden Fällen legt man sich ein separates Array an, welches die korrekte Reihenfolge der Schlüssel enthält - dies macht allerdings langfristig das Handling etwas mühselig und ist imho als Notlösung zu werten.

      Falsch:
      PHP-Code:
      var = {
          
      a1,
          
      b2,
          
      c3
      };
      var 
      i;

      for(
      i in o){
          
      o[i];
          
      // (!) Hier wird nicht garantiert, dass "i" beim ersten
          // Schleifendurchlauf den erwarteten Schlüssel "a" enthält.

      Richtig:
      PHP-Code:
      var arr = [
          {
      key'a'value1},
          {
      key'b'value2},
          {
      key'c'value3}
      ];
      var 
      i;

      for(
      i=0i<arr.lengthi++){
          
      arr[i]; // Ausgabe: 1, 2, 3

      Alternativ:
      PHP-Code:
      var = {
          
      a1,
          
      b2,
          
      c3
      };
      var 
      order = ['a''b''c'];
      var 
      ikey;

      for(
      i=0i<order.lengthkey=order[i++];){
          
      o[key]; // Ausgabe: 1, 2, 3

      Fazit: wirf json_encode ein numerisches Array entgegen und alles sollte wie gewünscht funktionieren.

      Viele Grüße,
      lotti

      Kommentar


      • #4
        Vielen Dank, das ist es!
        Ich habe mich nun für die numerische Arrays entschieden, es funktioniert wunderbar .

        Auch an dieser Stelle noch einmal danke für die ausführliche Erklärung,
        hat mir sehr weitergeholfen!

        Kommentar

        Lädt...
        X