Код: Выделить всё
$categories = [
12 => [
'id' => 12,
'name' => 'Car',
'children' => [
['id' => 14, 'name' => 'Volvo'],
['id' => 15, 'name' => 'Mercedez-Benz']
]
],
13 => [
'id' => 13,
'name' => 'Manga',
'children' => [
['id' => 16, 'name' => 'Naruto'],
['id' => 17, 'name' => 'Hunter X Hunter']
]
],
18 => [
'id' => 18,
'name' => 'Animals',
'children' => []
]
];
Я хочу отсортировать элементы $categories по столбцу name в возрастающем направлении, не теряя ключи первого уровня. code> данные подмассива с использованием столбца более глубокого имени.
Желаемый результат:
Код: Выделить всё
[
18 => [
'id' => 18,
'name' => 'Animals',
'children' => []
],
12 => [
'id' => 12,
'name' => 'Car',
'children' => [
['id' => 15, 'name' => 'Mercedez-Benz'],
['id' => 14, 'name' => 'Volvo']
]
],
13 => [
'id' => 13,
'name' => 'Manga',
'children' => [
['id' => 17, 'name' => 'Hunter X Hunter'],
['id' => 16, 'name' => 'Naruto']
]
]
]
Код: Выделить всё
function sortByName($a, $b) {
return strcmp($a["name"], $b["name"]);
}
usort($categories,"sortByName");
foreach($categories as $k => $v){
foreach($v as $kk => $vv) {
if ($kk == "children") {
usort($vv,"sortByName");
print_r($vv );
}
}
}
Кроме того, когда происходит сортировка, ключи первого уровня массива переиндексируются.
Подробнее здесь: https://stackoverflow.com/questions/135 ... lumn-below