phpbar.de logo

Mailinglisten-Archive

[php] Sortieren mit Array

[php] Sortieren mit Array

Lutz Zetzsche Lutz.Zetzsche at sea-rescue.de
Mit Sep 8 12:14:45 CEST 2004


Hi Norbert,


Norbert Pfeiffer schrieb:
>> abgesehen davon würde ich es mal so probieren: (ungetestet)
> hmm,
> http://www.uris.de/test/div/multisort.php4
> das kann wohl noch nicht wirklich ueberzeugen ... :-((

Doch, array_multisort() hat hier richtig sortiert. Die Doku sagt:

" Die angegebenen Arrays werden als Spalten einer Tabelle behandelt,
welche nach Reihen sortiert werden - ähnlich der SQL Klausel ORDER BY. Das
erste Array ist auch das erste in der Sortierreihenfolge. Die in diesem
Array gleichen Zeilen (Werte) werden anhand des nächsten angegebenen
Arrays sortiert, usw."

Wenn Du also alle Arrays als Sortierkriterium angibst, wird auch nach
allen sortiert. Gibst Du aber nur einen an, muesste nach meiner Erinnerung
auch nur nach einem sortiert werden - eben wie bei ORDER BY in einer
SQL-Abfrage. D.h. wandele Sebastians Beispiel mal etwas ab:

array_multisort( $FS['ctime'], SORT_NUMERIC, SORT_DESC);

So muesste es nur nach der "ctime" sortieren. Das sollte funktionieren,
weil auch gilt:

"array_multisort() wird zum Sortieren von entweder mehreren Arrays auf
einmal, oder eines multidimensionalen Arrays (entsprechend einer von
mehreren Dimensionen) benutzt. Bei der Sortierung werden die
Schlüsselassoziationen beibehalten."

Kann ich aber heute Abend noch mal genau ueberpruefen, wenn das dann noch
notwendig ist.


>> ... ansonsten sind im Handbuch mehr als genügend Beispiele ...
> zwei, http://de3.php.net/manual/de/function.array-multisort.php
> zwei, http://de3.php.net/manual/en/function.array-multisort.php
> und es sind die gleichen ... ;-)
>
> Soll ich auch noch die 'User Contributed Notes' zitieren ?
> Gleich der erste beschwert sich naemlich ... ;-)

ja, weil er die Funktion falsch angewendet hat. Guck Dir doch mal bitte
den Array an:

array[0][0]=teammember1
       [0][1]=teammember2
       [0][2]=total_points
array[1][0]=teammember1
       [1][1]=teammember2
       [1][2]=total_points

Wenn man hier nach "total_points" sortieren will, dann ist doch der Array
falsch aufgebaut (siehe auch Doku-Auszug oben). Da liegt das Problem und
nicht bei array_multisort(). Man muss eine Funktion schon so verwenden,
wie sie laut Dokumentation zu verwenden ist. Aber das Thema hatten wir bei
letzten Mal auch ausfuehrlich diskutiert. :-)


Viele Gruesse

Lutz


php::bar PHP Wiki   -   Listenarchive