2017-03-22 59 views
2

我想創建一個高爾夫球比分排行榜,但我有一個問題。我想按照誰有最低點來排列陣列,但是如果兩個或更多個點有相同的點,則排列他們所在的洞。用2個條件對數組進行排序

我最初的陣列看起來像這樣:

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 
     ) 
) 

現在,那麼我做這個命令的陣列由點:

$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); 

該訂單由點的數組,但你可以看到,我有3名球員得到7分,但在不同的洞上,並且想要排列那些有相同洞的球員,所以最高排名是最低排名。

希望這是有道理的,任何幫助表示讚賞。

在此先感謝:-)

回答

3

使用usort

實施例:

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

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

變化<>改變排序順序。

+0

這將在由高到低的順序對數據進行排序; – hassan

+0

完美,實際上:-) – Mansa

0

使用usort

該函數將使用用戶提供的比較函數按值排序數組。如果你想排序的數組需要按照一些非平凡的標準進行排序,你應該使用這個函數。

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

試試這個方法:

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

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