例如,假设我有几个数组,我需要按它们的顺序对它们进行排序:
$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。