Hallo,
ich habe ein Problem mit dem Sortieren von Arrays.
Ich habe ein Array ($users), welches fuer jeden User ein weiteres Array mit bestimmten Daten der User enthaelt.
Hier ein Beispiel:
Die Daten der User sollen in einer Tabelle ausgegeben werden. Jede Spalte soll in auf- und absteigender Reihenfolge, sortierbar sein. Ich habe mich auf php.net umgeschaut und folgene Funktion gefunden (hier: http://us3.php.net/manual/de/functio...multisort.php), die bis auf eine Kleinigkeit einwandfrei funktioniert:
Wenn ich die Funktion folgendermassen aufrufe, sortiert sie mein $users-Array nach den Werten des 5. Elements (hier E-Mail), aufsteigend, wendet die "Stringsortiermethode" an und schreibt das Ergebnis wieder in $users.
Soweit, so gut. Das einzige Problem: Die Funktion sortiert zuerst nach Grossbuchstaben A-Z und dann nach Kleinbuchstaben a-z. Das heisst im obigen Beispiel ist die Reihenfolge nicht:
1. AAA@email.com
2. bbb@email.com
3. CCC@email.com
sondern:
1. AAA@email.com
2. CCC@email.com
3. bbb@email.com
Auf der oben genannten Seite ist ein Beispiel genannt, wie man eine Groß-/Kleinschreibung nicht beachtende Sortierung hinbekommen kann, allerdings schaffe ich es nicht, das in meine Funktion einzubauen.
Hat jemand eine Idee, wie ich dieses Problem vermeiden kann? Oder kennt jemand eine andere Funktion, mit der ich mein Users-Array sortieren kann, ohne das die Gross- und Kleinschreibung beachtet wird?
Gruss,
Markus
ich habe ein Problem mit dem Sortieren von Arrays.
Ich habe ein Array ($users), welches fuer jeden User ein weiteres Array mit bestimmten Daten der User enthaelt.
Hier ein Beispiel:
PHP-Code:
$users =
Array
(
[u53] => Array
(
[0] => u53
[1] => username abc
[2] => T
[3] => -1
[4] => Hans Meier
[5] => [email]aaa@email.com[/email]
[6] => HM
[7] => admin
)
[u23] => Array
(
[0] => u23
[1] => username xyz
[2] => F
[3] => -1
[4] => Peter Mueller
[5] => [email]BBB@email.com[/email]
[6] => PM
[7] => user
)
[u44] => Array
(
[0] => u44
[1] => username def
[2] => F
[3] => 1262332800
[4] => Administrator
[5] => [email]ccc@email.com[/email]
[6] => A
[7] => admin
)
...
...
...
)
PHP-Code:
function UsersArraySort()
{
$n = func_num_args();
$ar = func_get_arg($n-1);
if(!is_array($ar)) {
return false;
}
for($i = 0; $i < $n-1; $i++) {
$col[$i] = func_get_arg($i);
}
foreach($ar as $key => $val) {
foreach($col as $kkey => $vval) {
if(is_string($vval)) {
${"subar$kkey"}[$key] = $val[$vval];
}
}
}
$arv = array();
foreach($col as $key => $val) {
$arv[] = (is_string($val) ? ${"subar$key"} : $val);
}
$arv[] = $ar;
call_user_func_array("array_multisort", $arv);
return $ar;
}
Wenn ich die Funktion folgendermassen aufrufe, sortiert sie mein $users-Array nach den Werten des 5. Elements (hier E-Mail), aufsteigend, wendet die "Stringsortiermethode" an und schreibt das Ergebnis wieder in $users.
PHP-Code:
$users = localUsersArraySort("5", SORT_ASC, SORT_STRING, $users);
1. AAA@email.com
2. bbb@email.com
3. CCC@email.com
sondern:
1. AAA@email.com
2. CCC@email.com
3. bbb@email.com
Auf der oben genannten Seite ist ein Beispiel genannt, wie man eine Groß-/Kleinschreibung nicht beachtende Sortierung hinbekommen kann, allerdings schaffe ich es nicht, das in meine Funktion einzubauen.
Hat jemand eine Idee, wie ich dieses Problem vermeiden kann? Oder kennt jemand eine andere Funktion, mit der ich mein Users-Array sortieren kann, ohne das die Gross- und Kleinschreibung beachtet wird?
Gruss,
Markus
Kommentar