关于TP5.1的无限分类。做的时候出现了如下的错误:知识不足的我,被虐来虐去。
问题:在model中做好无限分类后,前台以至给我提示son字段不存在。我就懵啦,我在无限分类的时候明明就是存的son字段啊咋就没有呢?
/** * 无限分类 得到多维数组 * @param array $arr 需要无限分类的数组 * @param string $id 数组id * @param string $pid 数组父id * @param string $child 保存子数组名称 * @return array 无限分类好的数组。 */ protected function Tree($arr=array(),$id='id',$pid='pid',$child = "child"){ if (!is_array($arr) || empty($arr)){ return array(); } try{ $key = array_column($arr,$id); $items = array_combine($key,$arr); foreach ($items as $k => $item){ if (isset($items[$item[$pid]])){ $items[$item[$pid]][$child][$item[$id]] = &$items[$k]; }else{ $items[0][$child][$item[$id]] = &$items[$k]; } } }catch (\Exception $e){ return array(); } return isset($items[0][$child]) ? $items[0][$child] : array(); } /** * 无限分类 返回一个排好序二维数组 * @param array $arr 需要无限分类的数组 * @param string $id 数组id * @param string $pid 数组父id * @return array 无限分类好的数组。 */ protected function TreeTow($arr=array(),$id='id',$pid='pid'){ if (!is_array($arr) || empty($arr)){ return array(); } try{ $items = []; foreach ($arr as $k=>$v){ if ($v[$pid] != 0){ $key = array_column($items,$id); $item = array_combine($key,$items); $key = array_search($item[$v[$pid]],$items); array_splice($items,$key+1,0,[$v]); }else{ array_push($items,$v); } } }catch (\Exception $e){ return array(); } return $items; }
我思来想去为啥提示son下标不存在。后来我知道了,因为有的父级下没有子级所以就没有son字段了。所以一直报错下标不存在。。。
然后就只能在循环的时候进行{if}判断一下。。。
<table> {volist name="data" id="vo" default="$default"} <tr> <td> <h4>{$vo.pid_text}</h4> </td> //在这里进行if判断 {if strtoupper(isset($vo.son)) } {volist name="vo.son" id="voson" empty="1"} <td> <input type="checkbox" value="{$voson.id}" name="power">{$voson.r_name} </td> {/volist} {/if} </tr> {/volist} </table>
我也不是很清楚,这是TMD为什么会这样。我以前写的时候直接两个{volist}嵌套完事。
努力学习,他天天向上。