基于多个条件对多维数组进行排序的PHP方法

4

我有一个多维数组,看起来像这样:

$arr=Array
(
    [0] => Array
        (
            [0] => TEAM1
            [1] => 3
            [2] => 0
            [3] => 422.47
            [4] => 192.62
        )

    [1] => Array
        (
            [0] => TEAM2
            [1] => 2
            [2] => 1
            [3] => 402.14
            [4] => 210.70
        )

    [2] => Array
        (
            [0] => TEAM3
            [1] => 3
            [2] => 0
            [3] => 376.79
            [4] => 174.64
        )
)

这五列分别是团队名称、获胜次数、输​​​​​​​赢次数、得分数和失分数。

如何按第一列(# 获胜次数)降序、第二列(# 输​​​​​​​赢次数)升序、第三列(# 得分数)降序排序$ arr


2
usort(),以及自定义比较函数... - Marc B
3个回答

8

我找到了一个解决方案,它使用了array_multisort()

foreach ($arr as $key => $row) {
    $wins[$key] = $row[1]; 
    $losses[$key] = $row[2];
    $ptsfor[$key] = $row[3];
}
array_multisort($wins, SORT_DESC, $losses, SORT_ASC, $ptsfor, SORT_DESC, $arr);

0

相反,您可以简单地使用 usort 函数,如下所示

usort($arr, function($a,$b){
    if($a[1] != $b[1])
        return $b[1] - $a[1];
    else if($a[2] != $b[2])
        return $a[2] - $b[2];
    else if($a[3] != $b[3])
        return $b[3] - $a[3];
});

或者您可以像这样使用它

usort($arr,function($a,$b){
    $c = $b[1] - $a[1];
    $c .= $a[2] - $b[2];
    $c .= $b[3] - $a[3];
    return $c;
});

我认为我的使用array_multisort()的方法更容易理解,因为它清楚地显示了SORT_DESCSORT_ASC - Bijan
为什么要使用循环和函数,如果可以在单个函数内轻松完成呢? - Narendrasingh Sisodia
看起来与 https://dev59.com/am455IYBdhLWcg3wAvbQ#31693963 相似,但我不确定是否喜欢将正数和可能为负数的数字连接成字符串。 - mickmackusa

0
您可以使用此函数。
    function sort_array($array, $sortkey, $order)
    {
        if ($order == "DESC")
            $or = "arsort";
        else
            $or = "asort";
        foreach ($array as $key => $array_row)
        {
            $sort_values[$key] = $array_row[$sortkey];
        }
        $or($sort_values);
        reset($sort_values);
        while (list ($arr_key, $arr_val) = each($sort_values))
        {
            $sorted_arr[] = $array[$arr_key];
        }
        return $sorted_arr;
    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接