Я изучал список смежности и модель вложенного набора, чтобы найти оптимальное древовидное решение.
Вплоть до этого момента. Теперь я подумал, что одним из основных преимуществ модели вложенного набора является то, что я могу использовать один SQL-запрос и некоторый код для получения полного дерева. Но обновлять / вставлять узлы сложно, и все дерево легко может быть повреждено.
Затем я наткнулся на эти два сообщения:
Рекурсивные категории с одним запросом?
http: //www.sitepoint. ru / форумы / showthread. php? t = 570360
Следующий код позволяет мне использовать список смежности с одним запросом SQL. Мне кажется, что список смежности легче обновлять и с меньшей вероятностью повредит все дерево.
Что вы думаете об этом коде?
Сгенерируйте многомерный массив, отражающий древовидную структуру
$nodeList = array();
$tree = array();
$query = mysql_query("SELECT id, title, page_parent FROM categories ORDER BY page_parent");
while($row = mysql_fetch_assoc($query)){
$nodeList[$row['id']] = array_merge($row, array('children' => array()));
}
mysql_free_result($query);
foreach($query AS $row){
$nodeList[$row['id']] = array_merge($row, array('children' => array()));
}
foreach ($nodeList as $nodeId => &$node) {
if (!$node['page_parent'] || !array_key_exists($node['page_parent'], $nodeList)) {
$tree[] = &$node;
} else {
$nodeList[$node['page_parent']]['children'][] = &$node;
}
}
unset($node);
unset($nodeList);
Подготовьте неупорядоченный список с вложенными узлами
function printMenu ($arrTreeToTraverse, $ext = '.html', $breadcrumb = '') {
// Pre loop stuff
echo "
\r\n";
}// function
printMenu($navigation, '.html');