首页 > 开发 > PHP > 正文

php 无限分类实现方法实例代码

2024-05-04 21:52:58
字体:
来源:转载
供稿:网友

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

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

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

  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.  * 无限分类 
  14.  * @param array $data 原始数组 
  15.  * @param int $id 当前id 
  16.  * @param int $layer 当前层级 
  17.  */ 
  18. function genCate($data$pid = 0, $level = 0) 
  19.     if($level == 10) break
  20.     static $tarrarray(); 
  21.     $l    = str_repeat(" "$level); 
  22.     $l    = $l.'└'
  23.     foreach($data as $row
  24.     { 
  25.         /** 
  26.          * 如果父ID为当前传入的id  www.CuoXIn.com 
  27.          */ 
  28.         if($row['parentid'] == $pid
  29.         { 
  30.             //如果当前遍历的id不为空 
  31.             $row['name']    = htmlspecialchars($l.$row['name']); 
  32.             $row['level']    = $level
  33.             $tarr[]    = $row
  34.             genCate($data$row['id'], $level+1);//递归调用 
  35.         } 
  36.     } 
  37.     return $tarr
  38. $carr    = genCate($yArr); 
  39. print_r($carr); 

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表