У меня есть массив этой формы:
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
Есть идеи?
Используйте рекурсивную функцию:
// 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); }
Вам нужно использовать ksort .
// Not tested ... function recursive_ksort(&$array) { foreach ($array as $k => &$v) { if (is_array($v)) { recursive_ksort($v); } } return ksort($array); }
function ksort_recursive(&$array) { if (is_array($array)) { ksort($array); array_walk($array, 'ksort_recursive'); } }
Как отмечалось в их комментариях, ответы с return ksort()
неверны, поскольку ksort () возвращает успешный bool.
Обратите внимание, что эта функция не выбрасывает «Warning: ksort () ожидает, что параметр 1 является массивом», когда задан не-массив – это соответствует моим требованиям, но, возможно, не вашим.