de.comp.lang.php.* FAQ

9.5. Wie kann ich ein Array nach einem beliebigen Kriterium sortieren lassen?

Antwort von Kristian Köhntopp

PHP stellt eine Reihe von vordefinierten Sortierfunktionen zur Verfügung. Wenn diese nicht ausreichen, kann man mit Hilfe der Funktion usort() nach beliebigen Kriterien sortieren lassen. Der Funktion muss eine Vergleichsfunktion und das zu sortierende Array als Parameter mit übergeben werden.

Das nachfolgende Beispiel sortiert ein Array von Paaren alphabetisch nach dem 2. Element.

kris@valiant:~ > ./php
<?php
  $a = array(
         array(0, "Schmidt"),
         array(2, "Albert")
       );

  function cmp($a, $b) {
    printf("type a = %s type b = %s\n", gettype($a), gettype($b));
    if ($a[1] == $b[1]) return 0;
    return ($a[1] > $b[1])?1:-1;
  }

  usort ($a, "cmp");

  foreach($a as $k => $v)
      printf("k = %s  v[0] = %s  v[1] = %s\n", $k, $v[0], $v[1]);
?>
X-Powered-By: PHP/4.0b5-dev
Content-type: text/html; charset=iso-8859-1

type a = array type b = array
k = 0  v[0] = 2  v[1] = Albert
k = 1  v[0] = 0  v[1] = Schmidt
kris@valiant:~ >

Antwort von Johannes Frömter

Weiterhin gibt es die Funktion array_multisort() , die - gefüttert mit einem passenden (eindimensionalen) "Sortierarray" - mehrdimensionale Arrays nach beliebigen Dimensionen ordnen kann.

foreach($a as $v) $s[] = $v[1];    // [1] = Dimension zur Sortierung
array_multisort($s, SORT_ASC, $a); // ASC = auf-, DESC = absteigend

Durch Einfügen weiterer "Sortierarrays" ($s) vor dem "Nutzarray" $a kann man auch nach mehreren Kriterien gleichzeitig sortieren lassen. Dabei kann nach jedem "Sortierarray" die Sortierrichtung und -art neu bestimmt werden.

Valid HTML 4.01! Valid CSS!

9.5. Wie kann ich ein Array nach einem beliebigen Kriterium sortieren lassen?
http://www.php-faq.de/q/q-arrays-sortieren.html
Archiv der de.comp.lang.php-FAQ Dies ist eine Archivseite von 2008 und wurde seitdem nicht geändert. Das dclp-FAQ-Team