Hallo zusammen,
ich hab mal wieder ein Problem! Ich möchte gerne ein Mehrdimensionales Array mit usort sortieren. Dazu habe ich eine Funktion (com_content_sortItems) geschrieben, welche festlegt, wie rum sortier wird und wonach. Das macht sie mit globalen Variablen
Hier mal mein Code (bissl vereinfacht):
global $com_content_sortBy, $com_content_sortDir;
function com_content_cmp($a, $b)
{
global $com_content_sortBy, $com_content_sortDir;
echo $a[$com_content_sortBy] . " --- " . $b[$com_content_sortBy] . "<br>\n";
if($a[$com_content_sortBy] == $b[$com_content_sortBy]) return 0;
$return = ($a[$com_content_sortBy] < $b[$com_content_sortBy]) ? -1*$com_content_sortDir : 1*$com_content_sortDir;
var_dump($return);
return $return;
}
function com_content_sortItems($items, $sortBy="created", $sortDir="ASC")
{
global $com_content_sortBy, $com_content_sortDir;
$com_content_sortBy = $sortBy;
$com_content_sortDir = ($sortDir == "ASC") ? 1 : -1;
return usort($items, "com_content_cmp");
}
$items = array(
array("created" => 5),
array("created" => 3),
array("created" => 7),
array("created" => 25),
array("created" => 1)
);
var_dump($items);
com_content_sortItems($items, "created", "ASC");
var_dump($items);
Die Ausgabe sieht dann etwa so aus:
array(5) {
[0]=>
array(1) {
["created"]=>
int(5)
}
[1]=>
array(1) {
["created"]=>
int(3)
}
[2]=>
array(1) {
["created"]=>
int(7)
}
[3]=>
array(1) {
["created"]=>
int(25)
}
[4]=>
array(1) {
["created"]=>
int(1)
}
}
7 --- 3
int(1)
7 --- 5
int(1)
7 --- 25
int(-1)
1 --- 7
int(-1)
3 --- 1
int(1)
5 --- 3
int(1)
array(5) {
[0]=>
array(1) {
["created"]=>
int(5)
}
[1]=>
array(1) {
["created"]=>
int(3)
}
[2]=>
array(1) {
["created"]=>
int(7)
}
[3]=>
array(1) {
["created"]=>
int(25)
}
[4]=>
array(1) {
["created"]=>
int(1)
}
}
Wie man sieht scheint das Sortieren zwar zu funktionieren, aber am Ende kommt das komplett unsortierte Array raus!
Hoffe ihr könnt mir helfen.
Lg Niko