我有一个这种形式的数组:
Array
(
[first_level] => Array
(
[dir_3] => Array
(
[subdir_1] => Array
(
[file_2.mp4] => stdClass Object
(
[name] => file_2.mp4
)
[file_1.mp4] => stdClass Object
(
[name] => file_1.mp4
)
)
)
[dir_1] => Array
(
[subdir_2] => Array
(
[file_6.mp4] => stdClass Object
(
[name] => file_6.mp4
)
[file_9.mp4] => stdClass Object
(
[name] => file_9.mp4
)
[file_7.mp4] => stdClass Object
(
[name] => file_7.mp4
)
)
[subdir_1] => Array
(
[file_8] => stdClass Object
(
[name] => file_8.mp4
)
)
)
)
)
我需要这样订购:
Array
(
[first_level] => Array
(
[dir_1] => Array
(
[subdir_1] => Array
(
[file_8] => stdClass Object
(
[name] => file_8.mp4
)
)
[subdir_2] => Array
(
[file_6.mp4] => stdClass Object
(
[name] => file_6.mp4
)
[file_7.mp4] => stdClass Object
(
[name] => file_7.mp4
)
[file_9.mp4] => stdClass Object
(
[name] => file_9.mp4
)
)
)
[dir_3] => Array
(
[subdir_1] => Array
(
[file_1.mp4] => stdClass Object
(
[name] => file_1.mp4
)
[file_2.mp4] => stdClass Object
(
[name] => file_2.mp4
)
)
)
)
)
我浏览了其他类似的问题,我一直试图用usort来解决它,但我无法理解它。 :S
有什么想法吗?
答案 0 :(得分:23)
使用递归函数:
// Note this method returns a boolean and not the array
function recur_ksort(&$array) {
foreach ($array as &$value) {
if (is_array($value)) recur_ksort($value);
}
return ksort($array);
}
答案 1 :(得分:4)
您需要使用ksort。
// Not tested ...
function recursive_ksort(&$array) {
foreach ($array as $k => &$v) {
if (is_array($v)) {
recursive_ksort($v);
}
}
return ksort($array);
}
答案 2 :(得分:4)
function ksort_recursive(&$array)
{
if (is_array($array)) {
ksort($array);
array_walk($array, 'ksort_recursive');
}
}
如他们的评论中所述,return ksort()
的答案不正确,因为ksort()会返回成功的bool。
请注意,此函数不会抛出"警告:ksort()期望参数1为数组"当给出非数组时 - 这符合我的要求,但也许不符合你的要求。