Как отсортировать все уровни многомерного массива по ключу?

Я нашел этот код для сортировки:

usort($array, function($a, $b) { return $a['order_inside_level'] - $b['order_inside_level']; }); 

Это хорошо для одного уровня. У меня есть что-то вроде этого:

 array( array( 'level'=>'aaa', 'order'='1', 'subs'=>array( array( 'level'=>'bbb', 'order'='1', 'subs'=>array( array( 'level'=>'ccc', 'order'='1', 'subs'=>array( array( 'level'=>'ddd', 'order'='1', 'subs'=>array( ... ) ) ) ) , array( 'level'=>'ccc', 'order'='2', 'subs'=>array( ) ) ), array( 'level'=>'bbb', 'order'='2' ), array( 'level'=>'bbb', 'order'='3' ) ) ) ), array( 'level'=>'aaa', 'order'='2', 'subs'=>array( ) ) ) 

Массив может иметь любую глубину и любое количество элементов на каждом уровне. Мне нужно отсортировать каждый уровень глубины (aaa, bbb, ccc и т. Д.), Используя код выше по ключевому заказу.

Вам нужно будет сделать это рекурсивно .

 recursive_sort($arr, $func) { foreach ($arr as $key => $val) { if (is_array($val)) { recursive_sort($val, $func); } } usort($arr, $func); } 

Этот код будет перебирать по заданному массиву, и для каждого значения, которое является массивом, вызовите себя со значением. В результате usort будем вызывать usort для каждого массива внутри структуры.

Вы бы назвали функцию той же, что и usort :

 recursive_sort($array, function($a, $b) { return $a['order_inside_level'] - $b['order_inside_level']; }); 
 function recursive_sort(&$arr) { fs($arr); foreach($arr as $k=> &$v){ if (isset($v['subs'])) { recursive_sort($v['subs']); } } } function sortByOrder($a, $b) { return $a['order_inside_level'] - $b['order_inside_level']; } function fs(&$array){ usort($array, 'sortByOrder'); } 

После нескольких попыток у меня это есть. Оно работает. Название ключа (subs) жестко запрограммировано, что не так хорошо, но … Я рад, что он работает.