spezielle Sortierung für Arrays
Nina
- php
0 Jeena Paradies-1 Nina0 Sven Rautenberg0 rabby
Hallo,
bisher kam ich immer recht gut mit asort aus, wobei ja der Index bestehen bleibt und der Array danach sortiert ist.
Nun ist es aber so, dass bei den Inhalten ein Sonderzeichen | vorkommt. Dieses wird dummerweise wie einer der letzten Buchstaben des Alphabets behandelt.
Stattdessen sollte eben dieses wie die 0 oder wie ein A behandelt werden, bzw. jeweils ganz oben stehen. Doch die übrigen Buchstaben/Zahlen/Zeichen sollten wie gewohnt behandelt werden.
Kann man den Sonderstatus dieses | irgendwo festelegen, sodass dies bei der Sortierung berücksichtigt wird oder gibt es eine Sortierfunktion, die ich dementsprechend modifizieren könnte?
Anhand eines kleinen Beispiels möchte ich das nochmal kurz darstellen:
$arr_unsortiert[1]='bla1|blub1|beep1';
$arr_unsortiert[2]='bla1|blub2|beep1';
$arr_unsortiert[3]='bla1|blub12|beep1';
//Ausgabe:
//******************
Array
(
[3] => bla1|blub12|beep1
[1] => bla1|blub1|beep1
[2] => bla1|blub2|beep1
)
//******************
//GEWÜNSCHTE Ausgabe:
//******************
Array
(
[1] => bla1|blub1|beep1
[3] => bla1|blub12|beep1
[2] => bla1|blub2|beep1
)
//******************
Bitte um hilfreiche Tipps.
Besten Dank,
und schönen Feiertag noch!
Hallo,
//GEWÜNSCHTE Ausgabe:
[1] => bla1|blub1|beep1
[3] => bla1|blub12|beep1
[2] => bla1|blub2|beep1
Warum soll blubb zwölf vor blubb zwei sein? Wenn nicht das wäre dann hätte ich natsort() vorgeschlagen.
Jeena
Hi Jeena,
leider geht bei der Sortierung immer noch nicht alles wie gewünscht :(
Anderes/Besseres Beispiel:
<?
$arr_unsortiert[1]='blub';
$arr_unsortiert[2]='blub2|beep1';
$arr_unsortiert[3]='blub|beep1';
natsort($arr_unsortiert);
print_r($arr_unsortiert);
?>
Wünschenswert wäre die Reihenfolge 1,3,2 und nicht 1,2,3.
Gibt es nicht eine "raw" Funktion von asort, wo man "einfach" die Reihenfolge festlegen kann, nach der Sortiert wird? Sodass eben das | wie eine 0 zählt?
Oder wie würdest Du das lösen?
DANKE
Moin!
Gibt es nicht eine "raw" Funktion von asort, wo man "einfach" die Reihenfolge festlegen kann, nach der Sortiert wird? Sodass eben das | wie eine 0 zählt?
Oder wie würdest Du das lösen?
usort o.ä. und eine eigene Vergleichsfunktion bieten sich doch an.
- Sven Rautenberg
so gehts :-)
function sortieren($a, $b) {
$a_arr = explode('|', $a);
$b_arr = explode('|', $b);
foreach (range(0,3) as $i) {
if ( $a_arr[$i] < $b_arr[$i] ) {
return -1;
}
elseif ( $a_arr[$i] > $b_arr[$i] ) {
return 1;
}
}
return -1;
}
$arr_unsortiert[1]='blub';
$arr_unsortiert[2]='blub2|beep1';
$arr_unsortiert[3]='blub|beep1';
usort($arr_unsortiert,'sortieren');
print_r($arr_unsortiert);