foomaker: array von arrays sortieren

Hallo zusammen.

Habe array von arrays.

Z.B.
$arr=array(
  array(1,'abc'),
  array(3,'cde'),
  array(2,'xyz')
);

Kann man $arr nach Elemten seiner Elemente sortieren?

Okay, ich könnte mir ne function basteln, die das "Eltern"-array durchwühlt und die einzelnen "Kind"-arrays anhand eines derer Elemente nach dem Bubble-Sort-Verfahren in ein neues "Eltern"-array kopiert.

Aber geht's auch einfacher?

Gruß vom foomaker

--
Natürlich glaube ich an die Existenz von Ausserirdischen. Schliesslich gibt es ja auch das PERFEKTE SCRIPT.
  1. Aber geht's auch einfacher?

    vermutlich suchst du array_multisort

    1. Aber geht's auch einfacher?

      vermutlich suchst du array_multisort

      ICH WAR BLIND!!! DOCH NUN KANN ICH WIEDER SEHEN!!!

      Danke, suit. Genau das habe ich von Blindheit geschlagen im array-Funktionenverzeichnis gesucht.

      Gruß vom foomaker

      --
      Natürlich glaube ich an die Existenz von Ausserirdischen. Schliesslich gibt es ja auch das PERFEKTE SCRIPT.
      1. ICH WAR BLIND!!! DOCH NUN KANN ICH WIEDER SEHEN!!!

        du bist schon der zweite der sowas diese woche zu mir sagt ;)

  2. echo $begrüßung;

    Kann man $arr nach Elemten seiner Elemente sortieren?
    Okay, ich könnte mir ne function basteln, die das "Eltern"-array durchwühlt und die einzelnen "Kind"-arrays anhand eines derer Elemente nach dem Bubble-Sort-Verfahren in ein neues "Eltern"-array kopiert.
    Aber geht's auch einfacher?

    Ja, nimm eine passende u*sort-Funktion mit einer selbst geschriebenen Vergleichsfunktion. str*cmp() kann bei einem Stringvergleich in der selbst geschriebenen Vergleichsfunktion zum Einsatz kommen das liefert gleich ein passendes Ergebnis.

    array_multisort() ist meist nicht anwendbar, weil man normalerweise ein Zeilenarray hat (und das sieht auch bei dir so aus), array_multisort() aber mit Spaltenarray arbeitet.

    Zeilenarray: Jedes Element stellt einen Datensatz dar.
    Spaltenarray: Jedes Element stellt eine (Datenbank-)Spalte dar. Ein Datensatz besteht aus mehreren korrespondierenden Einträgen aus jeder Spalte.

    echo "$verabschiedung $name";

    1. array_multisort() ist meist nicht anwendbar, weil man normalerweise ein Zeilenarray hat (und das sieht auch bei dir so aus), array_multisort() aber mit Spaltenarray arbeitet.

      in der php.net-doku ist unter beispiel 3 bei array_multisort beschrieben, wie man ein "zeilenarray" in ein "spaltenarray" konvertiert - im beispiel (bez zwei feldern aus der datenbank) sind es exakt 4 zeilen - ich denke das ist verkraftbar und entspricht eher dem sinn des array sortierens

      1. echo $begrüßung;

        array_multisort() ist meist nicht anwendbar, weil man normalerweise ein Zeilenarray hat (und das sieht auch bei dir so aus), array_multisort() aber mit Spaltenarray arbeitet.
        in der php.net-doku ist unter beispiel 3 bei array_multisort beschrieben, wie man ein "zeilenarray" in ein "spaltenarray" konvertiert - im beispiel (bez zwei feldern aus der datenbank) sind es exakt 4 zeilen - ich denke das ist verkraftbar und entspricht eher dem sinn des array sortierens

        Ja, aber bringt es gegenüber u*sort() einen Vorteil, dass man sein Array erst umordnen muss, und nach der Sortierung wieder zurückordnen, damit man mit seiner gewohnten, vielleicht sogar schon vorhandenen und nicht ohne weiteres änderbare Weiterverarbeitung fortfahren kann? Oder alternativ: Wie aufwendig ist es, das Drumrum auf eine andere Arraystruktur umzustellen, zumal ein Spaltenarray weniger verständlich als ein Zeilenarray ist, wie ich finde.

        echo "$verabschiedung $name";

        1. Ja, aber bringt es gegenüber u*sort() einen Vorteil, dass man sein Array erst umordnen muss, und nach der Sortierung wieder zurückordnen, damit man mit seiner gewohnten, vielleicht sogar schon vorhandenen und nicht ohne weiteres änderbare Weiterverarbeitung fortfahren kann? Oder alternativ: Wie aufwendig ist es, das Drumrum auf eine andere Arraystruktur umzustellen, zumal ein Spaltenarray weniger verständlich als ein Zeilenarray ist, wie ich finde.

          wieso - bei der methode wird doch nur das bestehende array in ein neues geschrieben um anhand diesem das alte zu sortieren?

          1. echo $begrüßung;

            wieso - bei der methode wird doch nur das bestehende array in ein neues geschrieben um anhand diesem das alte zu sortieren?

            Die Beschreibung im Handbuch finde ich diesbezüglich recht dürftig. Außerdem bestätigte ein (recht alter) Userkommentar, dass Zeilenarrays nicht (direkt) mit array_multisort() sortierbar sein. Dass man das Zeilenarray als letzten Parameter angeben kann, und dieses dann ebenfalls sortiert wird, war mir bisher nicht bekannt.

            Bei größeren Datenmengen sollte man aber trotzdem messen, ob u*sort() mit Sortierfunktion oder der Aufwand des Spaltenarray-Anlegens mehr Zeit verbraucht. Der Speicherverbrauch dürfte bei array_multisort() aufgrund des/der Extra-Arrays größer sein.

            echo "$verabschiedung $name";

            1. Bei größeren Datenmengen sollte man aber trotzdem messen, ob u*sort() mit Sortierfunktion oder der Aufwand des Spaltenarray-Anlegens mehr Zeit verbraucht.

              bei größeren datenmengen sollte man idealerweise eine datenbank damit beauftragen, die daten gleich entsprechend sortiert zu liefern ;)