php 无限分类

算法,各种算法对一个数学很烂的人来说真是一个严重的打击!!!但谁让咱干程序这行呢(哭)。

搞了几小时,参照 http://yuepin.com/Explore/tree.php? 该网址的说明实例,可算是明白一点,下边代码,给自己留个笔记。

注:因为是无限次的调用,所以我加了个判断,在层级$level=10的时候让他跳出。没有哪个正常网站会放超过10层的目录结构吧。

执行到static变量后,判断下当前层级,如果层级为0,那么表示这是最高级菜单,需要清空$arrcate的数据重新声明!

不这么做的话,在一张页面里调用两次或者多次,他会保留上次调用该方法时的值

复制代码
 1 $yArr    = array(
 2     1 => array('id'=>'1','parentid'=>0,'name'=>'一级栏目一'),
 3     2 => array('id'=>'2','parentid'=>0,'name'=>'一级栏目二'),
 4     3 => array('id'=>'3','parentid'=>1,'name'=>'二级栏目一'),
 5     4 => array('id'=>'4','parentid'=>1,'name'=>'二级栏目二'),
 6     5 => array('id'=>'5','parentid'=>2,'name'=>'二级栏目三'),
 7     6 => array('id'=>'6','parentid'=>3,'name'=>'三级栏目一'),
 8     7 => array('id'=>'7','parentid'=>3,'name'=>'三级栏目二'),
 9     8 => array('id'=>'8','parentid'=>2,'name'=>'二级栏目三'),
10 );
11 
12 /**
13  * 获取当前id的子ID
14  * @param array $data 原始数组
15  * @param int $id 当前id
16  * @param int $layer 当前层级
17  */
18 function genCate($data, $pid = 0, $level = 0)
19 {
20     if($level == 10) break;
21     $l        = str_repeat("    ", $level);
22     $l        = $l.'└';
23     static $arrcat    = array();
24     $arrcat    = empty($level) ? array() : $arrcat;
25     foreach($data as $k => $row)
26     {
27         /**
28          * 如果父ID为当前传入的id
29          */
30         if($row['parentid'] == $pid)
31         {
32             //如果当前遍历的id不为空
33             $row['name']    = $l.$row['name'];
34             $row['level']    = $level;
35             $arrcat[]    = $row;
36             //var_array($arr);
37             genCate($data, $row['id'], $level+1);//递归调用
38         }
39     }
40     return $arrcat;
41 }
42 
43 $carr    = genCate($yArr);
44 echo "<select>";
45 foreach($carr as $row)
46 {
47     echo "<option value={$row['id']}>";
48     echo $row['name'];
49     echo "</option>";
50 }
51 echo "</select>";
复制代码
posted @   cntnn11  阅读(730)  评论(0编辑  收藏  举报
(评论功能已被禁用)
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述
点击右上角即可分享
微信分享提示