array sortieren
Ilja
- php
0 Andreas Korthaus0 FrankieB0 dedlfix
yo,
ich habe ein array $test mit folgenden elementen:
Array ( [0] => Aawk [1] => 68 [2] => Cleric [3] => M [4] => 06/01/05 [5] => [6] => off [7] => 696 [8] => 04/13/05 [9] => Alt from Wont [10] => )
Array ( [0] => Acidbear [1] => 55 [2] => Monk [3] => M [4] => 06/01/05 [5] => [6] => off [7] => 0 [8] => [9] => Alt from Mindmezzed [10] => )
usw.
nun möchte ich das array sortieren, soweit kein problem. aber ich möchte nicht nach array[0] sortieren, wo die namen wie Aawk drinne stehen, sondern ich möchte das array nach dem datum sortiren, dass in array[4] steht. wie geht das ? hoffe ich habe mich verständlich ausgedrügt.
Ilja
Hi!
nun möchte ich das array sortieren, soweit kein problem. aber ich möchte nicht nach array[0] sortieren, wo die namen wie Aawk drinne stehen, sondern ich möchte das array nach dem datum sortiren, dass in array[4] steht. wie geht das?
Vermutlich mit usort(): http://de3.php.net/usort (siehe Beispiel 2).
Grüße
Andreas
Hallo Ilja,
Array ( [0] => Acidbear [1] => 55 [2] => Monk [3] => M [4] => 06/01/05 [5] => [6] => off [7] => 0 [8] => [9] => Alt from Mindmezzed [10] => )
nun möchte ich das array sortieren, soweit kein problem. aber ich möchte nicht nach array[0] sortieren, wo die namen wie Aawk drinne stehen, sondern ich möchte das array nach dem datum sortiren, dass in array[4] steht. wie geht das ? hoffe ich habe mich verständlich ausgedrügt.
Neben dem von Andreas Korthaus vorgeschlagenen usort(), könnte man auch array_multisort() verwenden.
http://de3.php.net/manual/de/function.array-multisort.php
In deinem Fall könnte es dann z.B. so aussehen:
$my_array = // das was Du sortieren willst;
$s = ""; $v = ""; $sort = "absteigend";
foreach($my_array as $v) $s[] = $v[4];
if ($sort == "absteigend") array_multisort($s, SORT_DESC, $my_array);
if ($sort == "aufsteigend") array_multisort($s, SORT_ASC, $my_array);
$sorted_array = $my_array;
Grüsse
Frankie
echo $begrüßung;
Ich hätte da zwei Dinge zu beanstanden.
$s = ""; $v = ""; $sort = "absteigend";
foreach($my_array as $v) $s[] = $v[4];
$s als String zu initialisieren, um es dann als Array zu verwenden, ist nicht nur unschön sondern birgt auch die Gefahr für Folgefehler in sich.
In der foreach wird es zwar automatisch zu einem Array konvertiert, das aber auch nur, weil es einen Leerstring enthält (schreib was anderes rein und du bekommst einen hübschen Fatal error), und weil du schreibend darauf zugreifst.
Es ist ja kein Problem ein leeres Array zu sortieren. Wenn aber $my_array leer ist - weil z.B. die Datenbankabfrage ein leeres Ergebnis lieferte - wird foreach nicht durchlaufen und $s bleibt ein String. Und dann beschwert sich array_multisort() zu Recht darüber.
Wenn du $my_array vor dem (erfolglosen) Befüllen mit Nutzdaten ebenfalls mit "" initialisieren würdest, gäbe es von foreach eine Warnung dafür.
Also:
$s = array();
$v vorab zu initialisieren ist überflüssig, da das von foreach sowieso bei jedem Durchlauf gemacht wird. Hier ist die Gefahr für Folgefehler bei nicht ausgeführtem foreach auch nicht vorhanden, weil $v außerhalb von foreach nicht weiter verwendet wird.
echo "$verabschiedung $name";