*zurKenntnisnehm*
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:
Der Aufruf hat als Parameter das Array und dann der / die Keys.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); '));
}
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 ...
Geändert von steffenk (14.06.2005 um 23:20 Uhr)
TYPO3 · MySQLDumper · dislabs
·
manche Mühlen mahlen schneller ...
"Ich habe Rücken"
Horst Schlämmer
*zurKenntnisnehm*
_________-- - adicto otra vez - --
(¯`·.¸¸.·´¯`·.¸¸..¸¸.·´¯`·.¸¸..¸¸.·´¯`·.¸¸.·`¯)
Unterwasserrugby - der dreidimensionale Sport
Waren heute Archeologenprüfungen?![]()
nein - eine freundliche Geste von Peter **dank**
TYPO3 · MySQLDumper · dislabs
·
manche Mühlen mahlen schneller ...
"Ich habe Rücken"
Horst Schlämmer
Interessant, aber spääät jetzt zu begreifen
Doch create_function() ist auch merkenswert!
Kann man die erzeugte Funktion (für Test)
sichtbar machen oder bleibt sie versteckt?
[321 Name="Joe"]
wie immer, lieber gleich mit notepad, dem Editor meines Vertrauens
[/321]
use my HTML-Tester
Motto'06: Mut zur deutschen Sprache!
nein, die ist nur solange gültig wie sie gebraucht wird, also temporär.
TYPO3 · MySQLDumper · dislabs
·
manche Mühlen mahlen schneller ...
"Ich habe Rücken"
Horst Schlämmer
also nur gerade für die 1 Ausführung, nicht mal für die Dauer des Scripts ... habs befürchtet, da sie ja keinen Namen bekommt!
Trotzdem mal drüber guck!
Danke Dir!
[321 Name="Joe"]
wie immer, lieber gleich mit notepad, dem Editor meines Vertrauens
[/321]
use my HTML-Tester
Motto'06: Mut zur deutschen Sprache!
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)