在PHP中对多维数组进行排序的最佳方法

时间:2016-01-22 10:54:28

标签: php arrays sorting multidimensional-array

我有这个数组:

$order_list = array ( array ("081", "01203", "2", "12000"),
                      array ("002", "01204", "8", NULL),
                      array ("021", "01207", "8", NULL),
                      array ("081", "01206", "8", NULL),
                      array ("043", "01205", "10", "14000"));         

我希望根据第一个值(081,002,021,081和043)对该数组进行排序(升序)。所以它看起来像这样:

array ( array ("002", "01204", "8", NULL),
        array ("021", "01207", "8", NULL),
        array ("043", "01205", "10", "14000"),
        array ("081", "01203", "2", "12000"),
        array ("081", "01206", "8", NULL));

怎么做?我了解了asort()ksort(),但它似乎只适用于关联数组,而不适用于多维数组。

2 个答案:

答案 0 :(得分:3)

您可以使用usort()

usort($yourArray, function ($a, $b) {
    if ($a[0] == $b[0]) return 0;
    return (int) $a[0] < (int) $b[0] ? -1 : 1;
});

参数$a$b是您的(子)数组。这个简单的函数比较了每个函数中的第一个值。

如果您的数组中有其他数字,则可以使用strcmp()

usort($yourArray, function ($a, $b) {
    return strcmp($a[0], $b[0]);
});

答案 1 :(得分:1)

以这种方式重写更容易:

usort($order_list, function($v1, $v2) { return $v1[0] - $v2[0]; });

或者使用sorted中的Nspl函数对数组进行排序非常方便:

use function \nspl\a\sorted;
use function \nspl\op\itemGetter;

$sortedOrders = sorted($order_list, itemGetter(0));