Сортировка вложеных массивов.

nike__

Новичок
Сортировка вложеных массивов.

Доброго времени суток.
Появилась проблема с сортировкой вложеного массива, суть проблемы в том что код выполняется без ошибок но не дает желаемого результата.
PHP:
function menuSort($data,$level)
{
foreach ($data as $value) {
	echo usort($data, '_tree_sort');
	if( isset( $value['subCat'] ) ) {
		menuSort($value['subCat'], $level+1);
		}
	}
}
function _tree_sort($a,$b)
{
  if($a['sort']==$b['sort'])
    return 0;
  elseif($a['sort']<$b['sort'])
    return 1;
  else
    return -1;
}
Масив:
PHP:
   Array
(
    [0] => Array
        (
            [id] => 1
            [parentId] => 0
            [name] => Новости
            [sort] => 1
            [subCat] => Array
                (
                    [0] => Array
                        (
                            [id] => 2
                            [parentId] => 1
                            [name] => Политика
                            [sort] => 1
                        )

                    [1] => Array
                        (
                            [id] => 3
                            [parentId] => 1
                            [name] => IT
                            [sort] => 1
                        )

                    [2] => Array
                        (
                            [id] => 4
                            [parentId] => 1
                            [name] => Образование
                            [sort] => 1
                        )

                )

        )

    [1] => Array
        (
            [id] => 5
            [parentId] => 0
            [name] => Скачать
            [sort] => 1
            [subCat] => Array
                (
                    [0] => Array
                        (
                            [id] => 6
                            [parentId] => 5
                            [name] => Игры
                            [sort] => 5
                            [subCat] => Array
                                (
                                    [0] => Array
                                        (
                                            [id] => 9
                                            [parentId] => 6
                                            [name] => Екшн
                                            [sort] => 1
                                        )

                                    [1] => Array
                                        (
                                            [id] => 10
                                            [parentId] => 6
                                            [name] => РПГ
                                            [sort] => 1
                                        )

                                    [2] => Array
                                        (
                                            [id] => 11
                                            [parentId] => 6
                                            [name] => Стратегии
                                            [sort] => 1
                                        )

                                )

                        )

                    [1] => Array
                        (
                            [id] => 7
                            [parentId] => 5
                            [name] => Программы
                            [sort] => 3
                        )

                    [2] => Array
                        (
                            [id] => 8
                            [parentId] => 5
                            [name] => Картинки
                            [sort] => 1004
                        )

                )

        )

)
Подскажите пожалуйста в чем может быть проблема или как можно отсортировать этот массив по другому.Заранее благодарен.
 

С.

Продвинутый новичок
Вы не понимаете, что такое цикл и итерация. Никто не будет вам тут читать (писать!) лекции по теории программирования заново, если вы пропустили их в своем учебном заведении. Наймите репетитора.
 

iceman

говнокодер
[offtop]С. подрапатывает репититором, обращайтесь к нему ;-)[/offtop]
 

nike__

Новичок
Автор оригинала: С.
Вы не понимаете, что такое цикл и итерация. Никто не будет вам тут читать (писать!) лекции по теории программирования заново, если вы пропустили их в своем учебном заведении. Наймите репетитора.
Тогда укажите пожалуйста на мою проблему более конкретней.
 

weregod

unserializer
nike__
а вы распишите по-русски, что делают опубликованные Вами ф-ции
 

nike__

Новичок
Автор оригинала: weregod
nike__
а вы распишите по-русски, что делают опубликованные Вами ф-ции
menuSort- рекурсивно проходит по всему масиву запуская функцию usort($data, '_tree_sort') которая в свою очередб запускает функцию для сравненения елементов _tree_sort($a,$b).
 

newARTix

Новичок
nike__
нафига переменная $level? она ведь не используется.

Наверное надо просто вынести usort из foreach. И ссылочку добавить.
function menuSort(&$data,$level)
{
echo usort($data, '_tree_sort');
foreach ($data as $value) {
if( isset( $value['subCat'] ) ) {
menuSort($value['subCat'], $level+1);
}
}
}

-~{}~ 26.08.10 01:19:

хотя это явно не реальный код, а что вы там натворили... хто его знает.
 

nike__

Новичок
Автор оригинала: newARTix
nike__
нафига переменная $level? она ведь не используется.

Наверное надо просто вынести usort из foreach. И ссылочку добавить.
хотя это явно не реальный код, а что вы там натворили... хто его знает.
$level завтыкал убрать после того как скопировал функцию.
В каком смысле не реальный код?
 

С.

Продвинутый новичок
Я извиняюсь за невнимательность. Код вполне осознанный. Отлаживайте. Выдавайте состояние данных на каждом шаге и определяйте, почему не так, как надо.
 

nike__

Новичок
Меняет почемуто только корневые елементы , остально остается как было . Хотя ф-я проходит по всем елментам.
 

С.

Продвинутый новичок
В голове у вас то, как алгоритм должен работать. Выдайте листинг того, как на самом деле работает код. Сравните. Найдите "неисправность". Это называется отладка.
 

nike__

Новичок
Автор оригинала: C
В голове у вас то, как алгоритм должен работать. Выдайте листинг того, как на самом деле работает код. Сравните. Найдите "неисправность". Это называется отладка.
В том то и дело что он должен работать, а не работает. Почему ума не приложу.

Автор оригинала: newARTix
nike__
я привел вариант, он тоже не работает?
Ваш вариант так и работает, хотя по идее все должно работать. Может ли это зависеть от структуры массивов?

Вот то что пока получилось в итоге:

PHP:
function getmenu($activeid,$db) {
    $parents = menuparents($db);
	$tree = structuring($parents);
	menuSort($tree);
    return $tree;
}
function _tree_sort($a,$b)
{
  if($a['sort']==$b['sort'])
    return 0;
  elseif($a['sort']>$b['sort'])
    return 1;
  else
    return -1;
}
function menuSort(&$data)
{
usort($data,'_tree_sort');
foreach ($data as $value) {
	if(isset($value['subCat'])) {
		menuSort($value['subCat']);
		}
	}
}
 

С.

Продвинутый новичок
В том то и дело что он должен работать, а не работает. Почему ума не приложу.
Так и будешь продолжать гадать на кофейной гуще? Или все-таки начнешь отлаживать код?
 

nike__

Новичок
Автор оригинала: С.
Так и будешь продолжать гадать на кофейной гуще? Или все-таки начнешь отлаживать код?
Если не можете предложить ничего дельного или подтолкнуть в нужном направлении, то не пишите.
 

newARTix

Новичок
nike__
под "дельным" ты понимаешь готовый код? За это принято платить деньги :) Код простейший, никаких подводных камней. Смотришь что на входе, смотришь что на выходе - много думаешь :)
 
Сверху