| Eine der häufigsten Arbeiten mit Arrays ist die Sortierung. | Auf dieser Seite finden sie einige Hinweise zur Sortierung mit PHP. |
PHP
|
PHP Hypertext Processor, PHP-Arrays |
| Array-Typen | Schlüssel, Indizierte und assoziative Arrays |
| Sortieren | Konstanten, Funktionen, Möglichkeiten |
| Verwandte Themen | Arrays sortieren in Javascript, Perl |
Sortierung von Arrays |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Sortier-KonstantenPHP definiert einige Konstanten zur Steuerung der Sortierung.♦ Details zu Globalen PHP-Konstanten.
SORT_REGULAR ↔ 'Normale' Sortierung (Standardwert)
Reihenfolge: NULL, negative Zahlen, Text (A..Z a..z ), positive ZahlenSORT_NUMERIC ↔ Numerische Sortierung
Reihenfolge: negative Zahlen, Text oder NULL, positive Zahlen Wichtig: NULL wird wie 0 sortiert ! Die Text-Sortierung ist unbestimmt, scheint jedoch in Gruppen a..z, NULL, A..Z zu sortieren, die selbst ungeordnet sind. SORT_STRING ↔ Alphabetische Sortierung
Reihenfolge: NULL, 0..9 A..Z a..z Achtung: Zahlen werden wie Ziffern-Strings sortiert, z.B. 1,12,123,2,23,234,3, ... Für komplizierte Fälle kann man eigene Sortier-Funktionen (usort() ) erstellen. |
SchlüsselBeachten sie beim Sortieren das Verhalten der Schlüssel:Einige Funktionen bewahren ausdrücklich die Schlüssel und ihre Zuordnung zu Werten, andere vergeben neue Schlüssel ! SpeicherplatzDas zu sortierende Array wird immer als Argument an die Sortier-Funktion übergeben und direkt bearbeitet, d.h. nicht zurückgegeben. Daher benötigt die Sortierung keinen zusätzlichen Speicherplatz.♦ Details zur Übergabe von Arrays an Funktionen). Die Sortierfunktionen liefern zwar ein Ergebnis (true / false), das aber normalerweise nicht verwendet wird. Wenn sie unabhängig von der Sortierung den Original-Zustand des Arrays erhalten wollen, dann müssen sie vorher eine → Kopie anfertigen. Umkehr-FunktionenZu den meisten Sortier-Funktionen gibt es die analoge Umkehr-Funktion. Die beiden zusammengehörenden Funktionen werden hier in nebeneinander liegenden Absätzen vorgestellt. Diese Funktionen arbeiten alle direkt mit dem Original-Array, benötigen daher keinen zusätzlichen Speicherplatz.Einzige Ausnahme ist Funktion array_reverse() (s.u.), die eine komplette Kopie mit umgekehrter Sortierung erzeugt. Test-ArrayZur Demonstration der verschiedenen Sortier-Funktionen wird dieses Array verwendet:
$ary = array(0,'a',NULL,1,'A',' ',-1);
shuffle($ary); |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Funktion sort()Sortiert ein Array aufsteigend nach Werten, löscht alle bestehenden Schlüssel und vergibt neue ganzzahlige Schlüssel [0],[1],[2],..Ohne Angabe einer Sortier-Konstanten wird SORT_REGULAR verwendet
sort($ary);
sort($ary,SORT_NUMERIC); sort($ary,SORT_STRING); |
Funktion rsort()Sortiert ein Array absteigend nach Werten, löscht alle bestehenden Schlüssel und vergibt neue ganzzahlige Schlüssel [0],[1],[2],..rsort($ary);
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Übersicht zu den Funktionen sort()
und rsort() (ohne Gewähr): So werden Zahlen, Texte und
unbekannte (leere) Array-Elemente sortiert:
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Funktion asort()Sortiert ein Array aufsteigend nach Werten und bewahrt dabei alle Schlüssel.asort($ary);
|
Funktion arsort()Sortiert ein Array absteigend nach Werten und bewahrt dabei alle Schlüssel.arsort($ary);
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Funktion natsort()Sortiert ein Array nach einem 'natürlichen' Algorithmus. Gut geeignet für Texte, die aus einem fixen String und einer Zahl kombiniert sind:Sortiert z.B. 'p1','p2','p10','p20',.. natsort($ary);
|
Funktion natcasesort()Sortiert ein Array genauso wie natsort(), jedoch unabhängig von Groß- und Kleinbuchstaben, z.B. 'p1','P2','p10','P20',..natcasesort($ary);
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Funktion ksort()Sortiert ein Array aufsteigend nach Schlüsseln und bewahrt dabei alle Zuordnungen zwischen Schlüsseln und Werten. Das ergibt nur mit Text-Schlüsseln einen Sinn.ksort($ary);
|
Funktion krsort()Sortiert ein Array absteigend nach Schlüsseln und bewahrt dabei alle Zuordnungen zwischen Schlüsseln und Werten.krsort($ary);
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Funktion usort()Sortiert ein Array nach einer eigenen (User)-Hilfsfunktion.usort($ary,'mycmp');
Das zweite Argument bezeichnet eine eigene Hilfs-Funktion zur Steuerung der Sortierung.Die Hilfsfunktion erhält je 2 zu vergleichende Elemente des Arrays und sollte {-1,0,1} zurückgeben, wenn {$a<$b, $a==$b, $a>$b} Das Beispiel rechts zeigt ein Muster, welches Kleinbuchstaben < Großbuchstaben < Ziffern sortiert. Dazu wird eine weitere Hilfsfunktion xord() (Modifikation von ord() ) verwendet. Die Umkehrung dieser Funktion müssen sie selbst programmieren - z.B. durch Vertauschen der beiden Zuweisungen $cmp=-1; und $cmp=1; Funktion uasort()Sortiert ein Array nach einer eigenen (User)-Hilfsfunktion und bewahrt dabei alle Schlüssel.uasort($ary,'mycmp');
|
Beispiel für eine Sortier - Hilfsfunktion:
function mycmp($a,$b) {
$cmp=0; $i=0;
}while(!$cmp && $i<strlen($a) && $i<strlen($b)) {
$ca=xord(substr($a,$i,1));
}$cb=xord(substr($b,$i,1)); if($ca<$cb) {$cmp=-1;} elseif($ca>$cb) {$cmp=1;} $i++; return $cmp; function xord($a) {
$c=ord($a);
}
if($c<65) {$c+=4*16;} elseif($c>90) {$c-=5*16;} return $c; |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Funktion array_reverse()Gibt ein neues Array mit umgekehrter Reihenfolge der Elemente zurück.$ra = array_reverse($ary);
|
Ausnahme: Diese Funktion ändert das Original-Array nicht ! Durch Herstellung der Kopie wird der Speicher-Bedarf verdoppelt ! |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Funktion shuffle()Mischt die Elemente eines Arrays, löscht alle bestehenden Schlüssel und vergibt neue ganzzahlige Schlüssel [0],[1],[2],..shuffle($ary);
|
Das Ergebnis des Mischens ist normalerweise nicht vorhersagbar, da es mit jeweils anderen Zufallszahlen berechnet wird. Allerdings kann man bestimmte Zufallsfolgen bei Bedarf auch reproduzieren (exakt wiederholen). ♦ Details unter Zufall @ PHP. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|