如何对PHP多维数组的键排序?现有代码结果与预期不符
解决多维数组按键排序的问题
你当前的问题核心是用错了排序函数,而且没有正确修改原数组——usort()是针对数组的值进行排序的,而你需要的是按键(key)排序,PHP专门提供了ksort()(按键升序)和krsort()(按键降序)来做这件事,完全不用绕弯子。
先看你的数组结构,需要排序的是最内层那个包含orange、blue、green的数组,咱们直接针对它做按键升序排序就行,同时要注意在循环里用引用,不然修改的只是临时变量,原数组不会变化。
修正后的代码
foreach ($array as &$value) { if (is_array($value)) { foreach ($value as &$v) { // 按键升序排序,正好符合你要的 blue -> green -> orange 顺序 ksort($v); foreach ($v as $fileIterator => $fileData) { echo $fileIterator . ' '; } } } } // 记得解除引用,避免后续操作意外修改数组元素 unset($value, $v);
为什么原来的代码没达到预期?
- 用错了排序函数:
usort()默认根据数组的值排序,和你要的按键排序完全不相关; - 没有修改原数组:你循环里的
$v是局部变量,usort($v)只改了这个临时变量,原数组根本没变化; - 即使你想用自定义逻辑模拟按键排序,也远不如
ksort()高效直接。
运行上面的代码,就能得到你预期的输出:blue green orange
内容的提问来源于stack exchange,提问作者peace_love
相关产品推荐
相关产品推荐

