以前实现无限分类都没好好研究过,今天突然来兴趣就随手写了一个递归的无限极分类,希望对大家有借鉴意义!
<?php
/*模拟数据库查询出来的分类数据*/
$data = array(
array('id'=>1,'name'=>1,'fid'=>0),
array('id'=>2,'name'=>2,'fid'=>0),
array('id'=>3,'name'=>3,'fid'=>0),
array('id'=>4,'name'=>4,'fid'=>1),
array('id'=>5,'name'=>5,'fid'=>2),
array('id'=>6,'name'=>6,'fid'=>3),
array('id'=>7,'name'=>7,'fid'=>4),
array('id'=>8,'name'=>8,'fid'=>9),
array('id'=>9,'name'=>9,'fid'=>4)
);
/**
* 无限分类递归函数
* @param array $data 分类信息
* @param string $fid 父类id
* @param integer $pad 页面显示的缩进大小
* @return string 拼接好的菜单(可以根据具体需求做修改)
*/
function menu(&$data, $fid, $pad=0) {
if(count($data) < 1) {
return;
}
//拼接字符串
$str = '';
foreach ($data as $key => $value) {
if($value['fid'] == $fid) {
$str .= str_repeat(' ', $pad);
$str .= $value['name'].'<br />';
unset($data[$key]);
//递归
$str .= menu($data,$value['id'],$pad+1);
}
}
return $str;
}
echo menu($data,0);
/*结果
1
4
7
9
8
2
5
3
6
*/