【问题标题】:Sort array with 2 conditions使用 2 个条件对数组进行排序
【发布时间】:2017-03-22 07:43:09
【问题描述】:

我正在尝试创建高尔夫比分直播排行榜,但遇到了一个问题。我想按谁的最低点对数组进行排序,但如果 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 分,但在不同的洞,我想对那些洞相同的球员进行排序,所以排名最高的是最低洞的球员。

希望这是有道理的,任何帮助表示赞赏。

提前致谢:-)

【问题讨论】:

    标签: php arrays


    【解决方案1】:

    使用usort

    例子:

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

    &lt; 更改为&gt; 以更改排序顺序。

    【讨论】:

    • 这将按降序对数据进行排序;
    • 完美,实际上:-)
    【解决方案2】:

    使用usort

    此函数将使用用户提供的比较函数按数组的值对数组进行排序。如果您要排序的数组需要按照一些重要的标准进行排序,您应该使用这个函数。

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

    【讨论】:

      【解决方案3】:

      试试这个方法:

      function order_by_points($a, $b){
      if ($a['points'] == $b['points'])
      
          // sort the higher points first:
          return $a['points'] < $b['points'] ? 1 : -1;
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2022-12-02
        • 2012-11-02
        • 2021-06-11
        • 1970-01-01
        • 2016-10-02
        • 1970-01-01
        相关资源
        最近更新 更多