我有这个数组:
$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));