Автор Тема: Сортиране на nested arrays  (Прочетена 1186 пъти)

Constantinff

  • Напреднали
  • *****
  • Публикации: 98
  • Distribution: Убунту Кармик
  • Window Manager: Гном
    • Профил
Сортиране на nested arrays
« -: Oct 20, 2011, 14:30 »
Имам масив който изглежда по следния примерен начин:
Код:
Array
(
    [1] => Array
        (
            [id] => 1
            [parent_id] => 0
            [title] => Title1
            [sort] => 30
        )

    [2] => Array
        (
            [id] => 2
            [parent_id] => 0
            [title] => Title2
            [sort] => 20
        )


    [3] => Array
        (
            [id] => 3
            [parent_id] => 1
            [title] => Title3
            [sort] => 20
        )

    [4] => Array
        (
            [id] => 4
            [parent_id] => 1
            [title] => Title4
            [sort] => 30
        )

     [5] => Array
        (
            [id] => 5
            [parent_id] => 1
            [title] => Title5
            [sort] => 10
        )

     [6] => Array
        (
            [id] => 6
            [parent_id] => 0
            [title] => Title6
            [sort] => 10
        )

     [7] => Array
        (
            [id] => 7
            [parent_id] => 5
            [title] => Title7
            [sort] => 10
        )

     [8] => Array
        (
            [id] => 8
            [parent_id] => 5
            [title] => Title8
            [sort] => 20
        )

)

Трябва да го подредя по следния начин 6-2-1-5-7-8-3-4
Ето и каква е логиката на подреждането. Всеки елемент има parent_id и sort, мисля че значението им се подразбира от имената на ключовете.
Всички елементи са подредени според тяхната стойност на 'sort' като след всеки елемент идват неговите деца и децата на децата ... и т.н. като и те са сортирани помежду си според техните 'sort' стойности.
6,2 и 1 са с parent_id 0 , т.е. са главните, след това следват децата на 1: 5 което е с най нисък sort от децата на 1, после 7 и 8 който са деца на 5; следва 3 и 4 който са следващите деца на 1.
Предполагам цялата задача ще може да се реши с доста на брой foreach, ksort, asort и другите sort, но търся възможно "по - елегантно" решение.
Нядавам се някой да може да помогне
Активен

mom

  • Напреднали
  • *****
  • Публикации: 266
  • Distribution: Ubuntu
  • Window Manager: Compiz
    • Профил
Re: Сортиране на nested arrays
« Отговор #1 -: Oct 20, 2011, 19:26 »
Привет,
Виж http://php.net/usort, само callback функцията ще трябва да ти е с малко повече условия, т.е. да гледа стойностите на parent_id и sort

Питанка - тези данни вероятно ги влечеш от DB. Ако да, защо не си ги ORDER BY parent_id, sort още в SQL заявката?
Активен

niakoi

  • Напреднали
  • *****
  • Публикации: 49
    • Профил
Re: Сортиране на nested arrays
« Отговор #2 -: Oct 21, 2011, 11:32 »
Привет,
на @mom предложението + вложени масиви:

Код:
$arr[$parentId][] = array('id' => $id, 'title' => $title);

поздрави
нас
Активен