【问题标题】:sort by a desc and b asc - array(key => array(a, b)按 a desc 和 b asc 排序 - array(key => array(a, b)
【发布时间】:2017-02-24 08:06:49
【问题描述】:

我有一个这样的数组:

$array = array($team => array('points' => x, 'runs' => y))

我汇总积分并与同一支球队一起跑步,结果是这样的:

[team1] => Array
    (
        [points] => 12
        [runs] => 1
    )

[team2] => Array
    (
        [points] => 11
        [runs] => 3
    )

[team3] => Array
    (
        [points] => 11
        [runs] => 2
    )

[team4] => Array
    (
        [points] => 8
        [runs] => 3
    )

我想通过运行 DESC 和点 ASC 对其进行排序。 变成这样:

[team4] => Array
    (
        [points] => 8
        [runs] => 3
    )
[team2] => Array
    (
        [points] => 11
        [runs] => 3
    )
[team3] => Array
    (
        [points] => 11
        [runs] => 2
    )
[team1] => Array
    (
        [points] => 12
        [runs] => 1
    )

【问题讨论】:

    标签: php arrays sorting multidimensional-array


    【解决方案1】:

    您可以将uasort 与自定义比较功能一起使用(为了保持密钥完整,您可以使用usort):

    uasort($teamArray, function($first, $second) {
        // first preference to points
        if ($first['points'] < $second['points']) return -1;
        if ($first['points'] > $second['points']) return 1;
    
        // points are equal, compare runs in descending order
        if ($first['runs'] > $second['runs']) return -1;
        if ($first['runs'] < $second['runs']) return 1;
    
        // both points and runs are equal
        return 0;
    });
    
    print_r($teamArray);
    

    【讨论】:

    • 我正在尝试使用 usort,但我不知道如何使用它 :) 它正在工作 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-28
    • 1970-01-01
    • 2013-08-27
    相关资源
    最近更新 更多