2017-03-22 4 views
2

Ich versuche, eine Golf-Livescore-Bestenliste zu erstellen, aber habe ein Problem. Ich würde gerne das Array nach den niedrigsten Punkten sortieren, aber auch, wenn 2 oder mehr die gleichen Punkte haben, ordne ich an, um welches Loch es sich handelt.Sortieren Array mit 2 Bedingungen

Meine erste Array sieht wie folgt aus:

Array 
(
    [0] => Array 
     (
      [userid] => 1301 
      [holes] => 6 
      [points] => -2 
     ) 

    [1] => Array 
     (
      [userid] => 231 
      [holes] => 5 
      [points] => 7 
     ) 

    [2] => Array 
     (
      [userid] => 3421 
      [holes] => 6 
      [points] => 7 
     ) 

    [3] => Array 
     (
      [userid] => 46 
      [holes] => 6 
      [points] => 3 
     ) 

    [4] => Array 
     (
      [userid] => 745 
      [holes] => 4 
      [points] => 7 
     ) 
) 

Nun, dann kann ich dies tun das Array von Punkten zu bestellen:

$sortArray = array(); 

foreach($playersArray as $person){ 
    foreach($person as $key=>$value){ 
     if(!isset($sortArray[$key])){ 
      $sortArray[$key] = array(); 
     } 
     $sortArray[$key][] = $value; 
    } 
} 

$orderby = "points"; 

array_multisort($sortArray[$orderby],SORT_ASC,$playersArray); 

Dies das Array von Punkten bestellt, aber wie Sie sehen können Ich habe 3 Spieler mit 7 Punkten aber auf verschiedenen Löchern und möchte diese mit gleichen Löchern bestellen, so ist der höchste Rang derjenige auf dem untersten Loch.

Hoffe, das macht Sinn und jede Hilfe wird geschätzt.

Vielen Dank im Voraus :-)

Antwort

3

Verwendung usort.

Beispiel:

usort($playersArray, function ($a, $b) { 
    if ($a['points'] == $b['points']) { 
     return $a['holes'] < $b['holes']; 
    } 

    return $a['points'] < $b['points']; 
}); 

ändern < zu > zu ändern, um zu sortieren.

+0

diese die Daten in absteigender Reihenfolge sortieren wird; – hassan

+0

Perfekt, eigentlich :-) – Mansa

0

Verwenden Sie usort.

Diese Funktion sortiert ein Array anhand einer benutzerdefinierten Vergleichsfunktion nach seinen Werten. Wenn das zu sortierende Array nach nicht-trivialen Kriterien sortiert werden soll, sollten Sie diese Funktion verwenden.

usort($score, function ($a, $b) { 
    return $a['points'] - $b['points'] 
     ? $a['points'] - $b['points'] 
     : $a['holes'] - $b['holes']; 
}); 
0

Versuchen Sie, diese Art und Weise:

function order_by_points($a, $b){ 
if ($a['points'] == $b['points']) 

    // sort the higher points first: 
    return $a['points'] < $b['points'] ? 1 : -1; 
}