Сортировка многомерного массива на двух уровнях на основе указанного столбца под каждым уровнемPhp

Кемеровские программисты php общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Сортировка многомерного массива на двух уровнях на основе указанного столбца под каждым уровнем

Сообщение Anonymous »

Вот многомерный массив, который я пытаюсь отсортировать на двух уровнях:

Код: Выделить всё

$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 по столбцу имени в возрастающем направлении, не теряя ключи первого уровня, И я хочу отсортировать каждого дочернего элемента
Я хочу отсортировать элементы $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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Php»