Gerade bei der Sortierung von mehrdimensionalen Arrays muss man häufig komplizierte Algorhythmen einsetzen, um die gewünschte Sortierung zu erreichen.
Ehrlichgesagt hab ich schon oft geflucht, weil die Ergebnisse nicht so waren wie erwartet.
In den Kommentaren von php.net bin ich über folgende Array-Sortierungsroutine gestolpert, die ein mehrdimensionales Array nach mehreren anzugebenen key sortiert. Genaugenommen ist dies ein Zweizeiler, wo man mehr als 3mal hinschauen muss, um es nachzuvollziehen, aber ausgesprochen geil von der Funktionalität:
PHP-Code:
function masort(&$data, $sortby){
if(is_array($sortby)){
$sortby = join(',',$sortby);
}
uasort($data,create_function('$a,$b','$skeys = split(\',\',\''.$sortby.'\');
foreach($skeys as $key){
if( ($c = strcasecmp($a[$key],$b[$key])) != 0 ){
return($c);
}
}
return($c); '));
}
Der Aufruf hat als Parameter das Array und dann der / die Keys.
Will man nur nach einem Key sortieren, gibt man den Key an, bei mehreren einfach die Liste der Keys als Array.
Auch habe ich hier erstmals die Funktion create_function gesehen, mit der man on-the-fly eine Funktion kreiert.
Will man die Sortierreihenfolge umkehren, so muss man lediglich in der create_function die Werte $a und $b vertauschen.
join ist nichts anderes als ein alias auf implode.
Ein genialer Streich ...