mehrdimensionales Array

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

  • mehrdimensionales Array

    Wie spreche ich ein mehrdimensionales Array an und wie sortiere ich es nach einem ganz bestimmten Wert?
    Zuletzt geändert von Tarlar; 21.01.2007, 18:37.

  • #2
    Genauso wie ein eindimensionales, und zwar mit foreach oder den anderen bekannten Konstrukten - nur mit dem Unterschied, dass eine einzige Schleife nicht mehr genügt.
    Je nachdem gibt es dafür auch rekursive Funktionen (array_walk(), array_map_recursive(), etc.), mehr dazu siehe im Handbuch.
    Nieder mit der Camel Case-Konvention

    Kommentar


    • #3
      array_map_recursive() ist wohl das was ich suche, aber leider gibts die Funktion im Handbuch nicht.

      Vllt könntest du mir dann die Funktion schreiben, mit der man in diesem Array nach der Größe sortiert:

      PHP-Code:
      Array
      (
          [
      0] => Array
              (
                  [
      name] => Hans
                  
      [groesse] => 180
              
      )

          [
      1] => Array
              (
                  [
      name] => Martin
                  
      [groesse] => 178
              
      )

          [
      2] => Array
              (
                  [
      name] => Tim
                  
      [groesse] => 183
              
      )

      Kommentar


      • #4
        Nicht, das ist nicht unbedingt das, was du suchst. Ich meinte übrigens array_walk_recursive, entschuldige den Patzer. Diese Funktion gibt's aber erst ab PHP 5 (PEAR Compat könnte helfen).

        Worin genau liegt denn jetzt eigentlich dein Problem? Welche eigenen Ansätze hast du schon?
        Nieder mit der Camel Case-Konvention

        Kommentar


        • #5
          Mein Problem liegt darin, dass ich noch nicht lange PHP mache und mich noch nie mit dem Sortieren von mehrdimensionalen Arrays beschäftigt habe.

          Ich komme einfach nicht drauf, wie ich das oben geschriebene Array noch der Größe ordnen soll.

          Nach dem Sortieren sollte dann das rauskommen:

          PHP-Code:
          Array
          (
              [
          0] => Array
                  (
                      [
          name] => Tim
                      
          [groesse] => 183
                  
          )

              [
          1] => Array
                  (
                      [
          name] => Hans
                      
          [groesse] => 180
                  
          )

              [
          2] => Array
                  (
                      [
          name] => Martin
                      
          [groesse] => 178
                  
          )



          Kommentar


          • #6
            Ich habe dich schon verstanden. Ich frage dich nur, ob es schon Ansätze in Form von Code gibt, da es hier in der Regel keine Fertiglösungen gibt. An welchem Punkt kommst du denn nicht weiter?

            Ein Array kann man z.B. folgendermaßen durchlaufen:
            PHP-Code:
            $array = array('la''le''lu');
            foreach (
            $array as $key => $value)
            {
                echo 
            $key ' : ' $value '<br />';

            Ein zweidimensionales Array ist ein Array, das noch eine Array-Ebene enthält. Folglich genügt nicht mehr nur eine Schleife, sondern?

            Und zum Sortieren gibt's so einige built-in Funktionen wie z.B. sort().
            Nieder mit der Camel Case-Konvention

            Kommentar


            • #7
              Na da braucht es natürlich 2 Schleifen. Soweit hab ich das schon verstanden, aber ich komme nicht drauf, wie das funktionieren soll, dass es in der übergeordneten Ebene sortieren wird nach Werten die in der Ebene darunter liegen.

              Ansätze im Code gibts leider keine, bin verzweifelt am Überlegen

              Kommentar


              • #8
                Original geschrieben von Tarlar
                Na da braucht es natürlich 2 Schleifen. Soweit hab ich das schon verstanden, aber ich komme nicht drauf, wie das funktionieren soll, dass es in der übergeordneten Ebene sortieren wird nach Werten die in der Ebene darunter liegen.

                Ansätze im Code gibts leider keine, bin verzweifelt am Überlegen
                Das doch nen rießen spaß den mal selber zu schreiben

                http://de.wikipedia.org/wiki/Bubblesort

                --> siehe PHP

                Kommentar


                • #9
                  Hast du dir denn mal den Link zur Funktion sort() im Handbuch angesehen? Dann wärst du nämlich eventuell auf array_multisort() gestoßen, das die Lösung deines Problems ist. Ganz ohne große Umstände.
                  Nieder mit der Camel Case-Konvention

                  Kommentar


                  • #10
                    Hab mir das schon angekuckt, aber nicht die Links unten.

                    Okay, bei multisort muss ich wohl Beispiel 4 anschauen, aber das was da geschrieben wird stimmt nicht. Das Beispiel sortiert die Bands genau anderst rum. Und wenn ich die SORT_ASC und SORT_DESC verändere passiert gar nichts.

                    Und bei der Anwendung auf mein Array kommt folgender Fehler:

                    Warning: array_multisort() [function.array-multisort]: Argument #1 is expected to be an array or a sort flag in

                    Kommentar


                    • #11
                      Nein, Beispiel 4 ist es nicht. So schwer kann es eigentlich nicht sein, die Funktion wird dort ja auch in Worten erklärt.
                      Du musst der Funktion das multidimensionale Array übergeben und eine Flag für die Sortierreihenfolge (bspw. SORT_DESC). Mehr ist es wirklich nicht.
                      Nieder mit der Camel Case-Konvention

                      Kommentar


                      • #12
                        Ach sorry, ich meine natürlich Beispiel 3 ^^

                        Schau es dir mal an und/oder kopiere den Code in eine eigene Datei und führe sie aus. Das Ergebnis stimmt nicht mit dem über ein, was dort steht

                        Kommentar


                        • #13
                          Es ist auch nicht Beispiel 3. Es ist - um genau zu sein - keines dieser Beispiele. Die lässt du jetzt einfach mal links liegen und liest dir den Text mal durch. Dann kommst du auch selbst auf die Lösung (die ich dir übrigens bereits im meinem letzten Posting verraten habe), denn die ist wirklich ziemlich simpel.
                          Nieder mit der Camel Case-Konvention

                          Kommentar


                          • #14
                            *seufz* Egal, was ich versuche, ich komme immer auf den obigen Fehler
                            Ich weiß sobald ich die Lösung sehe, dass es mir wie Schuppen von den Augen fällt

                            Kommentar


                            • #15
                              PHP-Code:
                              $array = array(
                                  array(
                              'name' => 'ben''size' => 185),
                                  array(
                              'name' => 'bob''size' => 178),
                                  array(
                              'name' => 'tom''size' => 163),
                              );

                              array_multisort($arraySORT_DESC);
                              echo 
                              '<pre>'print_r($array); echo '</pre>'
                              So simpel.
                              Nieder mit der Camel Case-Konvention

                              Kommentar

                              Lädt...
                              X