Array Sortierregeln überprüfen
mike
- php
Hi,
ich stehe mal wieder vor einem Problem:
ich lasse den User eine Liste von Objekten per Javascript sortieren,
und beim Abschicken bekommt der Server z.B. folgendes Postarray in der Reihenfolge, die der User sortiert hat.
[0] => array([id]=> 5, [type]=>1, [group]=>1)
[1] => array([id]=> 3, [type]=>3, [group]=>2)
[2] => array([id]=> 2, [type]=>1, [group]=>1)
[3] => array([id]=> 1, [type]=>2, [group]=>2)
[4] => array([id]=> 4, [type]=>2, [group]=>1
~~~)
Nun will ich sicherstellen, dass Objekte gleicher Gruppe([group]identisch) nur mit aufsteigender Type-Sortierung vorkommen, d.h. ich will den Array umsortieren, in Beispiel also nach:
~~~php
[0] => array([id]=> 5, [type]=>1, [group]=>1)
[1] => array([id]=> 1, [type]=>2, [group]=>2)
[2] => array([id]=> 2, [type]=>1, [group]=>1)
[3] => array([id]=> 3, [type]=>3, [group]=>2)
[4] => array([id]=> 4, [type]=>2, [group]=>1
~~~)
Weil vorher in Gruppe 2 type=3 vor type=2 kam, was nicht sein darf.
Mein bisheriger Ansatz:
~~~php
usort($postarray, "sortrules");
function sortrules($a, $b) {
if($a['group'] == $b['group']) {
return $a['type'] > $b['type']; //nach type sortieren (asc)
} else {
return 0; //Reihenfolge behalten
}
Das Problem dabei ist, dass die "normalen" Sortierfunktionen wie usort() nur jeweils zwei nebeneinander liegende "Zeilen" vergleichen können. Liegen also
mehrere "andere" Gruppen dazwischen, sortiert er beide Zeilen nicht mehr nach "type".
Wäre schön, wenn mir jemand auf die Sprünge helfen könnte.
Mike