phpbar.de logo

Mailinglisten-Archive

[php] Sortieren mit Array

[php] Sortieren mit Array

Sebastian Mendel lists at sebastianmendel.de
Don Sep 9 11:09:43 CEST 2004


Norbert Pfeiffer schrieb:

> Hi Lutz,
> 
>>Ich hoffe, dass das "Problem" damit erschoepfend behandelt ist. :-)
> 
> mitnichten,
> 
> - eine Sortierung muss bei gleichen Parametern _immer_ das gleiche
>   Ergebnis auswerfen, egal wieviele shuffle(); irgendwo eingebaut
>   werden. Sonst ist es irgendwas, aber keine Sortierungsfunktion.

tut es eindeutig!!! wenn natürlich zwei Werte identisch sind wird wohl 
_jede_ Sortier-Routine diese zwei Werte in der Original Reihenfolge 
belassen, diese kann natürlich durch zuvorige Shuffle unterschieldich 
sein, wenn aber die Sortierroutine bloß zwei Werte erhält die identisch 
sind osrtiert es da natürlich nichts um, das funktioniert also genau so 
wie es soll und man es erwartet!


> - es ist hirnrissig, fuer eine Sortierungsfunktion eine andere
>   Daten-Struktur, als die 'natuerliche', zu fordern.
>   Unter 'natuerlicher Daten-Struktur' verstehe ich eine Struktur,
>   wie sie z.B. MySQL bei einem Select uebergibt:
>   $ERG[$reccord][$fields]

array_multisort() ist dazu gedacht, wie eindeutig aus all den 
Benutzer-Beispielen hervorgeht, mehrdimensionale Arrays zu sortieren und 
genau dafür funktioniert es auch einwandfrei.

Wenn diese ähnlich einer Tabelle aufgebaut sind kann man das so lösen:

   a b c d e f g h i
1 . . . . . . . . .
2 . . . . . . . . .
3 . . . . . . . . .
4 . . . . . . . . .
5 . . . . . . . . .
6 . . . . . . . . .
7 . . . . . . . . .
8 . . . . . . . . .


$array[1]['a']
$array[1]['b']
$array[1]['c']
...
$array[2]['a']
...
$array[3]['a']
...

das ist auch genau das was man z. B. durch:

   while ( $row[] = mysql_fetch_assoc() ) {}

erhält,
und dafür verwendet man dann array_multisort():

   // sortiere nach i
   foreach ( $array as $value )
   {
     $sort_array[] = $value['i'];
   }
   array_multisort( $sort_array, $array );

Genau so steht das auch bereits bei den Benutzerbeiträgen.


> Das Problem ist IMHO erschoepfend behandelt, wenn das Beispiel
> sowohl fuer usort(); als auch fuer array_multisort(); ein immer
> konstantes Ergebnis auswirft, _mit_ eingebautem shuffle();

Tut es doch, zeig mir doch Bitte endlich mal wo array_multisort(), 
richtig verwendet, dies nicht tut?


> Super waere es dann auch noch, wenn die Erkenntnisse daraus in
> das aktuelle Manual einfliessen wuerden. Wir machen hier ja
> keinen 'persoenlichen' Hick-Hack - glaube ich ... :)

Also ich habe alle meine Erkenntnisse aus dem Handbuch.



-- 
Sebastian Mendel

www.sebastianmendel.de www.warzonez.de www.tekkno4u.de www.nofetish.com
www.sf.net/projects/phpdatetime        www.sf.net/projects/phptimesheet

php::bar PHP Wiki   -   Listenarchive