排序数组有2个条件

时间:2017-03-22 07:43:09

标签: php arrays

我正在努力创建一个高尔夫比分直播排行榜,但我遇到了一个问题。我想通过谁拥有最低点来排序数组,但是,如果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 个答案:

答案 0 :(得分:3)

使用usort

示例:

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

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

<更改为>以更改排序顺序。

答案 1 :(得分:0)

使用usort

  

此函数将使用用户提供的比较函数按其值对数组进行排序。如果要排序的数组需要按照一些非平凡的标准进行排序,则应使用此函数。

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

答案 2 :(得分:0)

尝试这种方式:

{{1}}