array umsortieren

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

  • array umsortieren

    Hallo Leute,

    ich bräuchte mal eine Idee wie ich ein array am besten umsortieren kann.

    Ursprungsarray
    Code:
      
    Array
    (
        [0] => Array
            (
                [id] => 1
                [titel] => Grosseltern
                [parent] => 0
                [test] => 0
            )
    
        [1] => Array
            (
                [id] => 3
                [titel] => Nachbarn
                [parent] => 0
                [test] => 1
            )
    
        [2] => Array
            (
                [id] => 10
                [titel] => Sonstige deppen
                [parent] => 0
                [test] => 2
            )
    
        [3] => Array
            (
                [id] => 4
                [titel] => schmidt
                [parent] => 3
                [test] => 0
            )
    
        [4] => Array
            (
                [id] => 5
                [titel] => Müller
                [parent] => 3
                [test] => 1
            )
    
        [5] => Array
            (
                [id] => 8
                [titel] => meyer
                [parent] => 3
                [test] => 2
            )
    
        [6] => Array
            (
                [id] => 7
                [titel] => Schmidts Kind
                [parent] => 4
                [test] => 0
            )
    
    )


    Zielarray
    Code:
      
    Array
    (
        [0] => Array
            (
                [id] => 1
                [titel] => Grosseltern
                [parent] => 0
                [test] => 0
            )
    
        [1] => Array
            (
                [id] => 3
                [titel] => Nachbarn
                [parent] => 0
                [test] => 1
            )
    
        [2] => Array
            (
                [id] => 4
                [titel] => schmidt
                [parent] => 3
                [test] => 0
            )
            
        [3] => Array
            (
                [id] => 7
                [titel] => Schmidts Kind
                [parent] => 4
                [test] => 0
            )
            
        [4] => Array
            (
                [id] => 5
                [titel] => Müller
                [parent] => 3
                [test] => 1
            )
    
        [5] => Array
            (
                [id] => 8
                [titel] => meyer
                [parent] => 3
                [test] => 2
            )
            
        [6] => Array
            (
                [id] => 10
                [titel] => Sonstige deppen
                [parent] => 0
                [test] => 2
            )
    
    
    )
    Code:
      
    
    Grosseltern			|ID 1 | Parent 0
    Nachbarn			|ID 3 | Parent 0
    |- Schmidt			|ID 4 | Parent 3
    |-- Schmidts Kind		|ID 7 | Parent 4
    |- Müller			|ID 5 | Parent 3
    |- Meyer			|ID 8 | Parent 3
    Sonstige Deppen			|ID 10| Parent 0
    Sortiert müsste nach parent und id werden, zum Beispiel wenn parent 3 ist dann müssen die arrays nach ID 3 folgen. Am Ende sollte ein Menü daraus werden.

    Zusammengebaut wird das Array mit einer Funktion die sich immer wieder selbst aufruft bis sie parent 0 erreicht.

    Jetzt bräuchte ich nur noch eine Idee wie ich das array umsortieren kann.
    Zuletzt geändert von marc75; 22.07.2005, 16:53.
    mfg
    marc75

    <Platz für anderes>

  • #2
    Die Array-Sortierfunktionen aus dem Manual sind dir sicherlich bekannt. Also frag ich mal dezent, warum nicht einfach ...
    PHP-Code:
    foreach ($array as $key => $subarray) {
        
    $newarray[$subarray['id']] = array(
            
    'titel' => $subarray['titel'],
            
    'parent' => $subarray['parent'],
            
    'test' => $subarray['test']
        );
    }
    print_r($newarray); 
    ... und ggf. noch sortieren?

    Kommentar


    • #3
      Die php-Sortierfunktionen sind mir bekannt, bzw. hab ich die gestern schon durchgesehen.

      Hab mir deine foreach() auch angesehen, aber kann da irgendwie den nutzen nicht erkennen, ausser das das array durchlaufen wird und die indizes mit den IDs ersetzt werden.

      Entweder sollte ich heute was anderes machen, oder ich kann einfach nicht erkennen wie ich das array 'schmidts kind' zwischen 'schmidt' und 'müller' schieben kann usw..
      mfg
      marc75

      <Platz für anderes>

      Kommentar


      • #4
        Wollte nur darauf hinweisen, dass dein Primärindex völlig sinnfrei ist, während der eigentliche Sinn in den IDs steckt.
        Nach der obigen foreach-Schleife hast du folgende Struktur:
        Code:
        Array
        (
            ...
            [4] => Array
                (
                    [titel] => schmidt
                    [parent] => 3
                    [test] => 0
                )
            [5] => Array
                (
                    [titel] => Müller
                    [parent] => 3
                    [test] => 1
                )
            [7] => Array
                (
                    [titel] => Schmidts Kind
                    [parent] => 4
                    [test] => 0
                )
            ...
        )
        Deine Sortierung (Verschachtelung) kannst du nun mit folgendem Code zaubern.
        PHP-Code:
        foreach ($newarray as $key => $subarray) {
            
        // wenn es ein Parent fürs aktuelle Element gibt
            
        if (isset($newarray[$subarray['parent']])) {
                
        // speichere das Element innerhalb seines Parents
                
        $newarray[$subarray['parent']][$key] = $subarray;
                
        // und lösche das Originalelement
                
        unset($newarray[$key]);
            }

        Sollte folgendes liefern:
        Code:
        Array
        (
            ...
            [4] => Array
                (
                    [titel] => schmidt
                    [parent] => 3
                    [test] => 0
                    [7] => Array
                        (
                            [titel] => Schmidts Kind
                            [parent] => 4
                            [test] => 0
                        )
                )
            [5] => Array
                (
                    [titel] => Müller
                    [parent] => 3
                    [test] => 1
                )
            ...
        )
        Ganz ähnlich geht es natürlich auch ohne die Vorbehandlung. Allerdings funktioniert das so nur für einfache Verschachtelung. Wenn "Schmidts Kind" selbst noch Kinder haben kann, mußt du was rekursives bauen.
        EDIT:
        Seh grad, dass Schmidt, Schmidts Kind und Müller ja alles Kinder von Nachbarn sind. Also vergiß das Zeug da oben. Du brauchst was rekursives.
        Zuletzt geändert von onemorenerd; 22.07.2005, 13:17.

        Kommentar


        • #5
          such mal in den codeschnipseln nach array_multisort... oder nur multisort. MrHappiness hatte da mal was gepostet.

          Kommentar


          • #6
            Ich glaube ich muss nochmal über der Funktion grübeln, womit ich das array erzeuge, dann kann ich mir das anschliessende umsortieren sparen, was dann sicherlich performanter ist.
            mfg
            marc75

            <Platz für anderes>

            Kommentar

            Lädt...
            X