欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  php教程

php 无限分类

程序员文章站 2022-05-14 13:12:35
...

算法,各种算法对一个数学很烂的人来说真是一个严重的打击!!!但谁让咱干程序这行呢(哭)。 搞了几小时,参照http://yuepin.com/Explore/tree.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, $psiff, $row['id'], $level+1);//递归调用
38         }
39     }
40     return $arrcat;
41 }
42 
43 $carr    = genCate($yArr);
44 echo "