У меня есть многомерный массив PHP, который я использую для генерации иерархического дерева UL. Однако перед отображением дерева UL я хотел бы отсортировать каждый уровень в массиве в алфавитном порядке с помощью атрибута name. Я представляю функцию, которая рекурсивно проверяет каждый уровень, организует его в алфавитном порядке и переходит на следующий уровень для сортировки этого уровня. Но я не знаю, как это сделать. Любая помощь будет оценена!Сортировка каждого уровня вложенного многомерного массива PHP
Мой массив:
Array (
[0] => Array (
[id] => 39348
[parent] => 0
[name] => Test
[children] => Array (
[0] => Array (
[id] => 41911
[parent] => 39348
[name] => Test2
[children] => Array (
[0] => Array (
[id] => 40929
[parent] => 41911
[name] => Test3
[children] => Array (
[0] => Array (
[id] => 40779
[parent] => 40929
[name] => C
)
[1] => Array (
[id] => 40780
[parent] => 40929
[name] => A
)
)
)
)
)
Моя попытка, которая движется порядок вокруг, но он по-прежнему не в алфавитном порядке. Обратите внимание, что в массив ($ это, 'sortByName') требуется CodeIgniter, что я работаю в:
function recursive_sort($array) {
usort($array, array($this,'sortByName'));
foreach($array as $key => $value) {
if(isset($value['children']) && !empty($value['children']) && is_array($value['children'])) {
$array[$key]['children'] = $this->recursive_sort($value['children']);
}
}
return $array;
}
function sortByName($a, $b){
return $a->name - $b->name;
}
UPDATE: РЕШЕНИЕ
function recursive_sort($array,$child='children') {
usort($array,function($a,$b){
return strcasecmp($a['name'], $b['name']);
});
foreach($array as $key => $value) {
if(isset($value[$child]) && !empty($value[$child]) && is_array($value[$child])) {
$array[$key][$child] = $this->recursive_sort($value[$child],$child);
}
}
return $array;
}
и ваша попытка? –
Проверьте это, если это поможет: http://stackoverflow.com/a/3805256/5645769 –
@TareqMahmood Спасибо за ссылку. Тем не менее, решения, перечисленные для этой публикации, похоже, применимы только к первому уровню внутри многомерного массива. Они не затрагивают мою ситуацию, когда у меня есть вложенные массивы. – skiindude22