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


PHP How can I sort a 2D array which consist of sequence of integers (dynamic length)?

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

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

谢谢

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

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

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

当心匿名函数,它仅适用于 PHP>= 5.3。