php – 单表的邻接树
发布时间:2020-12-13 21:34:27 所属栏目:PHP教程 来源:网络整理
导读:我已经阅读了很多讨论嵌套列表的人,但我想知道如何在 PHP中迭代一个adjacancy list / tree. 我有一个表:id,title,parent_id 我已经将所有记录选择到一个名为$pages的数组中. 然后使用这个PHP: function makeList($pages,$used) { if (count($pages)) { ech
我已经阅读了很多讨论嵌套列表的人,但我想知道如何在
PHP中迭代一个adjacancy list / tree.
我有一个表:id,title,parent_id 我已经将所有记录选择到一个名为$pages的数组中. 然后使用这个PHP: function makeList($pages,$used) { if (count($pages)) { echo "<ul>"; foreach ($pages as $page) { echo "<li>".$page['pag_title']; $par_id = $page['pag_id']; $subsql("SELECT * FROM pages WHERE pag_parent = ".$par_id.""); // running the new sql through an abstraction layer $childpages = $dbch->fetchAll(); makeList($childpages,$used,$lastused); echo "</li>"; } echo "</ul>"; } } 这种工作,但我最终重复任何子菜单,例如 >主页>新闻>子新闻>文章>文章>新闻>子新闻>文章>文章>子新闻>文章 我已经尝试将当前的id添加到一个通过该函数传递的数组中,然后使用in_array来检查它是否在那里,但我没有喜欢这样做. 任何帮助将非常感激. 我需要解析整个树,所以选择父级为0不是一个选项 解决方法
由于它已经执行了SQL,因此您无需在第一次函数调用之前执行此操作.
function makeList($par_id = 0) { //your sql code here $subsql("SELECT * FROM pages WHERE pag_parent = $par_id"); $pages = $dbch->fetchAll(); if (count($pages)) { echo '<ul>'; foreach ($pages as $page) { echo '<li>',$page['pag_title']; makeList($page['pag_id']); echo '</li>'; } echo '</ul>'; } } 要存储更多树,就像您可能想要查看此站点:Storing Hierarchical Data in a Database. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |