如何根据两个键对PHP数组排序,一个是升序键,另一个是降序键

如何根据两个键对PHP数组排序,一个是升序键,另一个是降序键,php,arrays,sorting,Php,Arrays,Sorting,我有这个阵列: $order_list = array ( array ("tangible", 1, 8, 1, 19000), array ("tangible", 6, 2, 10, NULL), array ("tangible", 1, 17, 1, 28000)); 我有这个代码来排序: usort($order_list, function ($a, $b) { if ($a[1] =

我有这个阵列:

$order_list = array ( array ("tangible", 1, 8, 1, 19000),
                      array ("tangible", 6, 2, 10, NULL),
                      array ("tangible", 1, 17, 1, 28000));
我有这个代码来排序:

usort($order_list, function ($a, $b) {
    if ($a[1] == $b[1]) return 0;
    return (int) $a[1] < (int) $b[1] ? -1 : 1;
});
虽然我需要对
$order\u列表[$I][2]
进行排序,但需要降序。因此,它将产生:

array ("tangible", 1, 17, 1, 28000)
array ("tangible", 1, 8, 1, 19000)
array ("tangible", 6, 2, 10, NULL)

如何基于这样的2个键对数组进行排序?谢谢。您应该更改排序算法以检查第二列。你应该做如下的事情。代码中的注释

usort($order_list, function ($a, $b) {
    // if both columns are same return 0
    if ((int) $a[1] == (int) $b[1] && (int) $a[2] == (int) $b[2]) return 0;
    // if first column is equal sort on the second column
    if ((int) $a[1] == (int) $b[1]){
        return (int) $a[2] > (int) $b[2] ? -1 : 1;
    }
    // else sort on the first column
    return (int) $a[1] < (int) $b[1] ? -1 : 1;
});
usort($order\u列表,函数($a,$b){
//如果两列相同,则返回0
if((int)$a[1]=(int)$b[1]&&(int)$a[2]=(int)$b[2])返回0;
//如果第一列相等,则对第二列进行排序
如果((int)$a[1]=(int)$b[1]){
返回值(整数)$a[2]>(整数)$b[2]?-1:1;
}
//else在第一列上排序
返回值(整数)$a[1]<(整数)$b[1]?-1:1;
});

正如在这组排序数组中已经解决的那样,您只需交换
$a
$b
即可使其以降序方式进行:

usort($order_list, function ($a, $b) {
    if( ($c = $a[1] - $b[1]) !== 0) {
        return $c;
    } else {
        return $b[2] - $a[2]; // descending
    }
});

比我的解决方案优雅得多。它很有魅力,兄弟。谢谢。“我真的很感激。”罗伯特桑森当然很高兴这有帮助
usort($order_list, function ($a, $b) {
    if( ($c = $a[1] - $b[1]) !== 0) {
        return $c;
    } else {
        return $b[2] - $a[2]; // descending
    }
});