比如说我有几个数组,我需要按顺序对它们进行排序:
$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);
由于
答案 0 :(得分:1)
您可以使用uasort函数来维护索引并仅重新排序数组元素:
uasort($list, function($a, $b) {
return strcmp(implode('-', $a), implode('-', $b));
});
strcmp函数比较两个字符串,如果前者是第一个则返回-1,如果相等则返回0,如果后者是第一个则返回1。
请注意anonymous function,它仅适用于PHP> = 5.3。