Этот сайт ещё в разработке Всем привет, прошу не пугаться внешнему виду и недоделаному содержимому сайта. Сайт ещё в разработке и вы попали на него скорее всего потому, что решили проверить домен из моего емейла, или если вы используете один из моих wordpress плагинов.

Подробнее...

Разработка сайтов

Решили создать сайт, но не знаете как определиться с исполнителем. Предлагаю вам заказать сайт у непосредсвенного исполнителя.

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

Большинство...

Подробнее...

Сортировка дерева

Опубликовано Isaev A. | Рубрика PHP | Размещено 06-05-2010

Метки: , ,

0

Решил написать небольшую функцию сортировки элементов дерева, для отображения всего дерева в развернутом виде. Почему решил написать статью – потому что в интернете ничего путного не нашел на эту тему.

На вход функции подается массив. Массив двухмерный В каждой строке первый элемент ID записи, второй parent (ID родителя). Вообщем стандартная структура для хранения деревьев. 3-й и последующие элементы строки любые значения, имя ветки например.

Попробую объяснить как это работает:
Берем первую строку массива и сравниваем по порядку id элемента с parent каждой записи до конца массива. Если они совпадают, то запись переносится из найденной позиции, под позицию первого элемента. Далее берем второй элемент и со второй позиции по порядку до конца, ищем совпадение передвигаем запись вверх под родителя.
Таким образом наше дерево как бы нарастает, сначала строится первый уровень , потом второй и так пока нарастать будет нечему.

function treesort ($arr)
{
 
	for ($i=0;$i
		$flag=$i;
		for ($j=$i+1;$j
			if ($arr[$j][1]==$arr[$i][0])
			{
				array_splice($arr,$flag+1,0,array(($arr[$j])));
				unset($arr[$j+1]);
				$arr = array_values($arr);
				$flag=$flag+1;
			}
 
		}
 
	}
return $arr;
}

Пример исходной таблицы:

id parent name
1 0 Group1
2 1 Group2
3 1 Group3
4 1 Room 204
5 0 Room 301
6 0 Room 302
7 1 Room 303
8 2 Group4
9 2 Room 401
10 3 Room 402
11 8 Room 12

Пример использования функции treesort на практике

пример использования treesort

Написать комментарий