Tree/AlLoadAll
Материал из PhpWiki.
Деревья в базах данных => Списки смежности => Загрузка дерева => Загрузка всего дерева
Как загрузить все дерево?
popoff
Представленный здесь скрипт возвращает массив, описанный здесь: Внутреннее представление деревьев в программах
<?php function tree_list_tree(&$a_list,$k_item=0) { if(empty($a_list[$k_item])) return array(); $a_tree=array(); for($i=0;$i<count($a_list[$k_item]);$i++) { $a_tree[]=array( 'k_item' => $a_list[$k_item][$i]['k_item'], 's_name' => $a_list[$k_item][$i]['s_name'], 'a_tree' => tree_list_tree($a_list,$a_list[$k_item][$i]['k_item']) ); } return $a_tree; } function tree_list_load_all() { // Возвращает ложь в случае ошибки //1. Загружаем данные. Загружаем в таком виде, в каком они записаны в таблице. //Загружаем сразу все дерево одним запросом $r=mysql_query(" select t_catalog_tree.k_item, #идентификатор элемента t_catalog_tree.k_parent, #идентификатор родительского элемента # элементы верхнего уровня содержат здесь 0 t_catalog.s_name #название from t_catalog, #данные t_catalog_tree #дерево where t_catalog.k_item=t_catalog_tree.k_item order by t_catalog.s_name"); //Обратите внимание, что в запросе строки отсортированы по s_name. //Это сделано для того, что бы и сами элементы массива $a_tree и // списки дочерних элементов этого массива были отсортированы по этому полю. if(!$r) return false; $a_list=array(); //Ключ массива - идентификатор родительского элемента // значение - список дочерних элементов for($i=0;$i<mysql_num_rows($r);$i++) { $f=mysql_fetch_assoc($r); if(empty($a_list[$f['k_parent']])) $a_list[$f['k_parent']]=array(); $a_list[$f['k_parent']][]=$f; } return tree_list_tree($a_list); } ?>
