0

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

$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);

或者

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

谢谢

4

1 回答 1

1

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

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

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

注意匿名函数,它只适用于 PHP >= 5.3。

于 2013-11-04T16:47:25.567 回答