Niko: Problem mit usort

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

  1. Hallo!

    com_content_sortItems($items, "created", "ASC");

    Befrage mal die Suchmaschine deiner Wahl nach "call by reference" und "call by value" bezogen auf PHP.

    --
    LG,
    Snafu
    1. Super danke =) Das sind so Sachen, die einem beim "Learning By Doing" durch die Lappen gehen!

      Lg Niko