Mehrdimensionalen Array sortieren

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

  • Mehrdimensionalen Array sortieren

    Hallo,

    ich habe eine XML in einen komplexen Array eingelesen, und würde
    die einzelnen [EVENT]-Elemente nach der [id] aus dem [Service]-Array sortieren.
    Den Aufbau des Array sieht man im folgenden.

    Code:
    Array
    (
        [EVENT] => Array
            (
                [0] => Array
                    (
                        [id] => 31989
                        [start] => 16:00:00
                        [stop] => 16:15:00
                        [duration] => 00H15M00S
                        [Service] => Array
                            (
                                [id] => 28208
                            )
    
                        [title] => Array
                            (
                                [lang] => deu
                                [_content] => Text2
                            )
    
                    )
    
                [1] => Array
                    (
                        [id] => 39496
                        [start] => 14:00:00
                        [stop] => 18:00:00
                        [duration] => 04H00M00S
                        [Service] => Array
                            (
                                [id] => 28201
                            )
    
                        [title] => Array
                            (
                                [lang] => deu
                                [_content] => Textbla
                            )
    
                    )
    
                 [2] => Array
                     
                     ... usw.
    Nimmt man für so etwas multisort oder definiert sich per usort eine
    eigene Sortierreihenfolge? Bin für Tipps u. ev. ein kleines Codebeispiel
    zur Veranschaulichung dankbar.

    Viele Grüße,
    Matthias

  • #2
    Re: Mehrdimensionalen Array sortieren

    Original geschrieben von alkaluropus
    Nimmt man für so etwas multisort oder definiert sich per usort eine
    eigene Sortierreihenfolge?
    man nimmt in aller erster linie mal die boardsuche
    Kissolino.com

    Kommentar


    • #3
      welchen Sortieralgo du letztendlich verwendest bleibt dir selbst überlassen - bei so kleinen Dingen sind die Geschwindigkeitsunterschiede nicht so groß.
      Wichtig ist nur, dass du ihn korrekt auf die Mehrdimensionalität anwendest
      [COLOR=royalblue]Ein großes DANKE an alle, die sich auf selbstlose Weise im Forum einbringen.[/COLOR]

      [COLOR=silver]btw: REAL PROGRAMMERs aren't afraid to use GOTOs![/COLOR]

      [color=indigo]Etwas ernster, aber auch nicht weiter tragisch, sieht die Situation bei Software-Patenten aus. Software-Patente sind eine amerikanische Erfindung und stehen auf dem selben Blatt wie genveränderte Babynahrung, die im Supermarkt nicht mehr als solche gekennzeichnet werden soll, um die Hersteller nicht gegenüber denen natürlicher Produkte zu diskriminieren ...[/color]
      (from here)

      Kommentar


      • #4
        guckst du hier - hat mir sehr geholfen...

        http://www.php-resource.de/forum/sho...ight=multisort

        Kommentar


        • #5
          Hmm - ich bin noch am basteln, habs leider noch nicht hinbekommen.

          Wichtig wäre ja auch, daß zwei Sortiervorgänge nacheinander
          ablaufen, so daß zuerst die Arrays nach dem Element
          $data["Event"][$i]["Service]["id] und nach dieser Sortierung
          noch nach $data["EVENT"][$i]["start"] sortieren lassen.

          Wenn man das also mit Zeilen u. Spalten einer Tabelle vergleichen
          kann, so als wenn man in Excel "Sortieren nach" und im Feld
          darunter gleich "Anschliessend nach" wählt. Nicht das beste
          Beispiel aber es beschreibt was ich erreichen will.

          Viele Grüße
          Matthias

          Kommentar


          • #6
            die Funktion von MrHappiness macht genau das, deswegen hab ich dir den Link gepostet - schau doch einfach mal. Da brauchste nur nen array übergen wie sortiert werden soll...

            Kommentar


            • #7
              Hallo,

              Original geschrieben von prego
              die Funktion von MrHappiness macht genau das, deswegen hab ich dir den Link gepostet - schau doch einfach mal. Da brauchste nur nen array übergen wie sortiert werden soll...
              OK - habe es mir mal genau durchgeschaut, und du hast recht. Allerdings
              habe ich noch das Problem, das ich nicht weiß wie ich meine beiden
              Faktoren $sort["Event"][$i]["Service]["id]
              und $sort["EVENT"][$i]["start"] in die $order einbaue. Ist einfach eine
              Syntaxfrage.


              PHP-Code:

              function multisort($array$criterias)
              {
                
              $sort_rule '';
                foreach(
              $criterias as $criteria)
                {
                  foreach(
              $array as $row)
                    
              $sort_array[$criteria['col']][] = $row[$criteria['col']];
                  
              $sort_rule .= '$sort_array['.
                    (
              is_numeric($criteria['col']) ? $criteria['col'] : "'".$criteria['col']."'").
                    
              '], '.$criteria['dir'].',';
                }
                eval(
              "array_multisort($sort_rule".' $array);');
                return 
              $array;
              }


              $order = array(
                  array(
                      
              'col' => 'id',
                      
              'dir' => SORT_ASC
                  
              )
                  array(
                      
              'col' => 'start',
                      
              'dir' => SORT_ASC
                  
              )
              );

              echo 
              "<pre>";
               
              print_r($sort);
              echo 
              "</pre>";

              echo 
              "<pre>";
               
              print_r(multisort($sort$order));
              echo 
              "</pre>"

              Viele Grüße
              Matthias
              Zuletzt geändert von alkaluropus; 21.06.2005, 14:00.

              Kommentar


              • #8
                Kompliziert, wenn du einen Index namens service_id auf gleicher Ebene wie start hättest, wäre es allerdings überhaupt kein Problem
                Ich denke, also bin ich. - Einige sind trotzdem...

                Kommentar


                • #9
                  Original geschrieben von mrhappiness
                  Kompliziert, wenn du einen Index namens service_id auf gleicher Ebene wie start hättest, wäre es allerdings überhaupt kein Problem
                  Ja - dachte ich mir auch. Jetzt habe ich es so umprogrammiert, das
                  es schon auf die service_id vorselektiert ist. Jetzt muss ich also
                  nur noch nach Startzeit sortieren. Du sagst, es wäre kein
                  Problem. Mir fehlt halt nur die Syntax, wie ich die Position von 'start'
                  im Array in der $order angebe.

                  Kommentar

                  Lädt...
                  X