2017-03-22 29 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; 
}