Я нашел этот код для сортировки:
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) жестко запрограммировано, что не так хорошо, но … Я рад, что он работает.