Hallo PHP.de Community,
ich habe ein Problem mit der Sortierung eines Arrays. Ich möchte es nach diesen Kriterien sortieren:
points absteigend
bonus_points absteigend
wins absteigend
top_5 absteigend
top_10 absteigend
Ich habe eine Funktion anhand eines Codeschnipsel geschrieben, der points und bonus_points sortieren konnte. Muss ich jetzt noch an den Return Werten spielen? Oder gibt es da einfachere Lösungen als verschachtele If Strukturen?
ich habe ein Problem mit der Sortierung eines Arrays. Ich möchte es nach diesen Kriterien sortieren:
points absteigend
bonus_points absteigend
wins absteigend
top_5 absteigend
top_10 absteigend
Ich habe eine Funktion anhand eines Codeschnipsel geschrieben, der points und bonus_points sortieren konnte. Muss ich jetzt noch an den Return Werten spielen? Oder gibt es da einfachere Lösungen als verschachtele If Strukturen?
PHP-Code:
<?
function sort_driver_array($a, $b) {
if ($a['points'] == $b['points'] && $a['bonus_points'] == $b['bonus_points'] && $a['wins'] == $b['wins'] && $a['top_5'] == $b['top_5']) {
if ($a['top_10'] > $b['top_10']) return 1;
} else if ($a['points'] == $b['points'] && $a['bonus_points'] == $b['bonus_points'] && $a['wins'] == $b['wins']) {
if ($a['top_5'] > $b['top_5']) return 1;
} else if ($a['points'] == $b['points'] && $a['bonus_points'] == $b['bonus_points']) {
if ($a['wins'] > $b['wins']) return 1;
} else if ($a['points'] == $b['points']) {
if ($a['bonus_points'] > $b['bonus_points']) return 1;
}
return $a['points'] < $b['points'] ? 1 : -1;
}
$standing_array = array();
$standing_array[] = array("name" => "Platz 6", "points" => "60", "bonus_points" => "20", "wins" => "16", "top_5" => "0", "top_10" => "8");
$standing_array[] = array("name" => "Platz 4", "points" => "80", "bonus_points" => "20", "wins" => "16", "top_5" => "0", "top_10" => "0");
$standing_array[] = array("name" => "Platz 2", "points" => "100", "bonus_points" => "5", "wins" => "19", "top_5" => "0", "top_10" => "0");
$standing_array[] = array("name" => "Platz 3", "points" => "100", "bonus_points" => "0", "wins" => "4", "top_5" => "0", "top_10" => "0");
$standing_array[] = array("name" => "Platz 1", "points" => "100", "bonus_points" => "10", "wins" => "1", "top_5" => "2", "top_10" => "8");
$standing_array[] = array("name" => "Platz 5", "points" => "60", "bonus_points" => "20", "wins" => "16", "top_5" => "0", "top_10" => "10");
echo "<pre>";
print_r($standing_array);
echo "</pre>";
echo "<p>";
usort($standing_array, "sort_driver_array");
echo "<pre>";
print_r($standing_array);
echo "</pre>";
?>
Kommentar