PHP无限极分类代码的实现

作者: JONE 分类: PHPer 发布时间: 2017-08-30 14:03

一 原表结构

二 从数据库吧原表提取为一个二维数组如下

$arr= array(
  array('id'=>1,'c_name'=>'科技','c_parent_id'=>0),
  array('id'=>2,'c_name'=>'计算机','c_parent_id'=>1),
  array('id'=>3,'c_name'=>'航空航天','c_parent_id'=>1),
  array('id'=>4,'c_name'=>'民航','c_parent_id'=>3),
  array('id'=>5,'c_name'=>'火星计划','c_parent_id'=>3),
  array('id'=>6,'c_name'=>'美食','c_parent_id'=>0),
  array('id'=>7,'c_name'=>'湘菜','c_parent_id'=>6),
  array('id'=>8,'c_name'=>'川菜','c_parent_id'=>6),
  array('id'=>9,'c_name'=>'粤菜','c_parent_id'=>6),
  array('id'=>11,'c_name'=>'徽菜','c_parent_id'=>6),
  array('id'=>12,'c_name'=>'口味虾','c_parent_id'=>7),
  array('id'=>13,'c_name'=>'口味蛇','c_parent_id'=>7),
  array('id'=>14,'c_name'=>'口味蛙','c_parent_id'=>7),
  array('id'=>15,'c_name'=>'宫爆鸡丁','c_parent_id'=>7),
  array('id'=>16,'c_name'=>'黄鸭叫','c_parent_id'=>7),
  array('id'=>17,'c_name'=>'笔记本','c_parent_id'=>2)
);

三 编写递归函数

/*
 *无限级分类
 *@parme1 array $categories
 *@parme2 int $parent_id=0 要寻找的父类ID
 *$param3 $level =0 当前的分类所属的层级
 *@return array $list已经分类好的数据
 */

function totree($categories,$parent_id=0,$level=0){
 //定义数组保存数据
 static $list=array();

//循环遍历
 foreach($categories as $cat){
 //匹配
 if($cat['c_parent_id']==$parent_id){
 //将当前函数中的level加入到分类数据中
 $cat['level']=$level;

//保存数据
 $list[]=$cat;

//获取$cat可能存在的所有子分类,递归调用自己
 totree($categories,$cat['id'],$level+1);
 }
 }
 return $list;
 }

四 打印输出效果

 $arr2=totree($arr);
 
 $str ='<table border=1 >';
 foreach($arr1 as $arr3){
    $str .='<tr>';
    $str .= '<td>'.$arr3['id'].'</td>';
    $str .= '<td>'.str_repeat('----',$arr3['level']). $arr3['c_name'].'</td>';
    $str .= '<td>'. $arr3['c_parent_id'].'</td>';
    $str .='</tr>';
 }
 $str .='</table>';
 
 echo $str;

发表评论

电子邮件地址不会被公开。 必填项已用*标注