PHP实现简单的树形列表之二
2017.5.22 北京 大雨
创新互联建站专注为客户提供全方位的互联网综合服务,包含不限于成都做网站、成都网站建设、庆元网络推广、微信小程序开发、庆元网络营销、庆元企业策划、庆元品牌公关、搜索引擎seo、人物专访、企业宣传片、企业代运营等,从售前售中售后,我们都将竭诚为您服务,您的肯定,是我们最大的嘉奖;创新互联建站为所有大学生创业者提供庆元建站搭建服务,24小时服务热线:028-86922220,官方网址:www.cdcxhl.com
来到公司之后, 准备把代码移植到公司的小项目里,移植的过程中发现了一处设计有问题的地方,调整一下。
第一处错误是:构建叶子节点的时候,只保存了节点的名称,没有存ID, 如果页面跟后台交互的时候,当存在节点名称一样的情况,服务器就不能判断出用户正在再操作那个节点。
更改了一下数据结构的定义:
用数组来存放一个节点, 如果这个节点是末端节点,则该数组,只有一个字符串元素,
如果一个节点为叶子节点,则该节点将会有两个字符串元素,第一元素存节点名称,第二个元素存节点ID。
如果这个节点存在子节点,则在当前数组中,增加一个数组,所有的子节点的元素存放在这个数组中。
从数据库中取数据的代码调整如下:
function build_book_tree($data, $parentid){ $nodeName = ''; $child = []; foreach($data as $key => $val){ //如果当前遍历的项跟查询的id相同,则获取节点的名称 if ($val[0] == $parentid){ $nodeName = $val[1]; } //如果当前节点的父节点跟查询的节点相同,则通过递归,获取他的子节点,并将结果,赋给当前节点节点数组中 if ($val[2] == $parentid){ array_push($child, build_book_tree($data, $val[0])); } } //不存放空节点 if (count($child) > 0) return array($nodeName, $child); else //return $nodeName; return [$nodeName, $parentid]; }
生成HTML list的代码调整如下
function build_html_list($data) { //输出标准父子节点 if (is_array($data) and count($data) == 2){ if (is_string($data[0]) and is_array($data[1])){ // 输出节点名 echo "
- ";
foreach ($data[1] as $item){
if (is_string($item)){
echo "
- ".$item." "; } else{ build_html_list($item); } } echo "
这样,如果用户单击一个 li 元素的时候,就可以从 li元素的 cid 属性中,查找到 节点 id 了
本文标题:PHP实现简单的树形列表之二
当前URL:http://ybzwz.com/article/ihjiip.html