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


Best Way To Sort Multidimensional Array in PHP

我有这个数组:

$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(),但似乎仅适用于关联数组,而不适用于多维数组。

你可以使用 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]);
});

这样重写更容易:

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

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

use function 'nspl'a'sorted;
use function 'nspl'op'itemGetter;
$sortedOrders = sorted($order_list, itemGetter(0));