phpbar.de logo

Mailinglisten-Archive

[php] Sortieren mit Array

[php] Sortieren mit Array

Lutz Zetzsche Lutz.Zetzsche at sea-rescue.de
Mit Sep 8 11:02:59 CEST 2004


Hi Norbert,


Norbert Pfeiffer schrieb:
> dann hast Du sicher auch hierfuer keinen Erklaerungsnotstand:
> http://www.uris.de/test/div/multisort.php4
> http://www.uris.de/test/div/multisort.php5
>
> Habe auch versucht, die Reihenfolge der Spalten in multisort,
> so zu veraendern, wie sortiert werden soll, also $FS[3] zuerst.
> Aber das ueberlasse ich Dir - erschreck Dich nicht ... :-(

ich habe festgestellt, dass bei jedem Aufruf Deiner PHP4- und PHP5-Seite
die Sortierung bei array_multisort() anders ausfaellt. Es hat also nichts
damit zu tun, dass es in PHP4 anders sein koennte als in PHP5.

Ein kurzer Blick in Deinen Code offenbart meiner Ansicht nach die Ursache:

<Code-Auszug Anfang>
   usort($FS, 'compare');
   viewer($FS);
   shuffle($FS);
   ?><HR><?
   $eg = array_multisort($FS[0], SORT_STRING,  SORT_DESC,
                         $FS[1], SORT_NUMERIC, SORT_DESC,
                         $FS[2], SORT_NUMERIC, SORT_DESC,
                         $FS[3], SORT_NUMERIC, SORT_DESC,
                         $FS[4], SORT_NUMERIC, SORT_DESC);
   viewer($FS);
<Code-Auszug Ende>

Wenn Du natuerlich zwischen usort() und array_multisort() den Array $FS
mit shuffle() munter zufaellig durcheinander wuerfelst, ist es kein
Wunder, wenn auch ein zufaelliges Ergebnis bei der Sortierung mit
array_multisort() herauskommt.

Sauber waere, bei usort() eine Kopie von $FS (z.B. $FS_usort) zu sortieren
und anschliessend $FS oder eben eine exakte Kopie mit array_multisort().
Somit waere sichergestellt, dass beide Funktionen auf derselben Basis
sortieren. So ist Deine Versuchsanordnung aber falsch und folglich auch
das Ergebnis.

Ansonsten hat Sebastian schon Einiges dazu gesagt, so dass ich das Ganze
nicht weiter durchgetestet habe.


> Und wenn man den Aufwand zwischen usort(); und array_multisort();
> vergleicht, liegt usort(); mit 5 Minuten zum Hinschreiben sowieso
> weit vor dieser fragwuerdgen Neuerung ... ;-)

Wie bei den frueheren Diskussionen mit den gleichen Argumenten und dem
gleichen Ergebnis bleibt diese Aussage auch hier aus meiner Sicht nicht
richtig. Mit array_multisort() kriege ich es meist deutlich unter 5
Minuten hin.

Aber jedem seine Meinung und seinen bevorzugten Weg. :-) Von daher sollten
wir diese Diskussion hier beenden. Du hast Dich bisher nicht von Deiner
Meinung abbringen lassen, also lassen wir es damit gut sein. ;-)


Viele Gruesse

Lutz


php::bar PHP Wiki   -   Listenarchive