Multi-Level-Arrays sortieren

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

  • Multi-Level-Arrays sortieren



    Mit eigener Power komme ich leider nicht mehr weiter - und die ganzen Google Ergebnisse haben bisher auch nicht zum gewünschtem Erfolg verholfen.

    Wie der Titel schon sagt, geht es hier um mehrdimensionale Arrays (aus einer JSON-Api-Abfrage) ...

    Ich habe folgende Array-Struktur - diese möchte ich auf allen Ebenen nach 'Name' alphabetisch Sortieren lassen.

    Code:
    Array (
            [0] => Array
                (
                    [ID] => 5698155015
                    [Name] => MyName2
                    [Children] => Array
                        (
                            [0] => Array
                                (
                                    [ID] => 5698160015
                                    [Name] => MyName2
                                )
    
                            [1] => Array
                                (
                                    [ID] => 5698161015
                                    [Name] => MyName1
                                )
    
                            [2] => Array
                                (
                                    [ID] => 5698162015
                                    [Name] => MyName3
                                )
    
                        )
    
                )
    
            [1] => Array
                (
                    [ID] => 5698159015
                    [Name] => MyName1
                    [Children] => Array
                        (
                            [0] => Array
                                (
                                    [ID] => 5698223015
                                    [Name] => MyName1
                                    [Children] => Array
                                        (
                                            [0] => Array
                                                (
                                                    [ID] => 5698225015
                                                    [Name] => MyName2
                                                )
    
                                            [1] => Array
                                                (
                                                    [ID] => 5698226015
                                                    [Name] => MyName1
                                                )
    
                                        )
    
                                )
    
                            [1] => Array
                                (
                                    [ID] => 5698224015
                                    [Name] => MyName2
                                )
    
                        )
    
                )
    
        )
    Hab mich schon überall umgesehen, auch multisort und usort kennengelernt und stehe dennoch auf dem Schlauch

    Bin für weitere Tipps sehr dankbar

  • #2
    Usort ist doch schon mal gut....
    Und dann damit das Array rekursiv durchlaufen.

    Wo ist da dein Problem?
    Zuletzt geändert von combie; 30.05.2013, 18:40.
    Wir werden alle sterben

    Kommentar


    • #3
      Ewig heute damit rumgemacht aber jetzt läufts

      PHP-Code:
      function sortlevel(&$array){
          foreach(
      $array as $key => $value) {
              
      $sort[] = $value['Name'];
          }
          
      array_multisort($sortSORT_ASC$array);
      }



      function 
      sortrecursive(&$array){ 
          
      sortlevel($array);
          foreach(
      $array as $key => $value){
              if(
      is_array($array[$key]['Children'])){
                  
      sortrecursive($array[$key]['Children']);
              }
          }

      Verbesserungsvorschläge?

      Kommentar


      • #4
        Glückwunsch!


        Eine ungetestete Alternative:
        PHP-Code:
        <?php
        function sorter($a,$b)
        {
              return 
        strcmp($a['Name'],$b['Name']);
        }   

        function 
        walker(&$item)
        {
            if(
        is_array($item)) 
                
        usort($item,'sorter');
        }

        $array = array(); // mit deinen Daten füllen


        // sortieren
        walker($array);
        array_walk_recursive($array,'walker'); 
        ?>

        <pre>
         <?php
          var_export
        ($array)
         
        ?>
        </pre>
        Zuletzt geändert von combie; 30.05.2013, 19:59.
        Wir werden alle sterben

        Kommentar

        Lädt...
        X