PHP如何对由整数序列(动态长度)组成的2D数组进行排序?

时间:2013-11-04 16:13:11

标签: php arrays

比如说我有几个数组,我需要按顺序对它们进行排序:

$list[0] = array(1,2,3,5);
$list[1] = array(1,2,4,6,8);
$list[2] = array(1,2,3,4,9);

我正在寻找的结果是:

$list[2] = array(1,2,3,4,9);
$list[0] = array(1,2,3,5);
$list[1] = array(1,2,4,6,8);

在不必使用大量foreach循环的情况下,获得此类结果的最优雅方法是什么? 顺便说一下,数组是树路由,我正试图找到树的最左边的分支。


我已经看了一些答案,但它在某种程度上只是正确的。当它开始排序双或三位整数时,它就会失败(很可能是因为它将列表视为字符串而不是单个整数;或者序列可能不是按降序排列)。

尝试对这些列表进行排序,您将看到原因:

$list[0] = array(1,2,5);
$list[1] = array(1,2,4,14);
$list[2] = array(1,2,4,15);

OR

$list[0] = array(1,2,5);
$list[1] = array(1,2,4,14,9);
$list[2] = array(1,2,4,15,8);

由于

1 个答案:

答案 0 :(得分:1)

您可以使用uasort函数来维护索引并仅重新排序数组元素:

uasort($list, function($a, $b) {
    return strcmp(implode('-', $a), implode('-', $b));
});

strcmp函数比较两个字符串,如果前者是第一个则返回-1,如果相等则返回0,如果后者是第一个则返回1。

请注意anonymous function,它仅适用于PHP> = 5.3。