博主辛苦了,我要打赏银两给博主,犒劳犒劳站长。
【摘要】一个PHP利用递归方法实现的无限分类。
完整代码如下:
// pid = 0 是顶级分类
// pid 是父级分类的id
$data = array(
0 => array(
'id' => 1,
'pid' => 0,
'city' => '中国'
),
1 => array(
'id' => 2,
'pid' => 1,
'city' => '江苏'
),
2 => array(
'id' => 3,
'pid' => 1,
'city' => '福建'
),
3 => array(
'id' => 4,
'pid' => 2,
'city' => '南京'
),
4 => array(
'id' => 5,
'pid' => 2,
'city' => '无锡'
),
5 => array(
'id' => 6,
'pid' => 3,
'city' => '福州'
),
6 => array(
'id' => 7,
'pid' => 3,
'city' => '龙岩'
),
7 => array(
'id' => 8,
'pid' => 7,
'city' => '永定'
),
8 => array(
'id' => 9,
'pid' => 1,
'city' => '湖南'
),
9 => array(
'id' => 10,
'pid' => 2,
'city' => '苏州'
)
);
function category($data,$pid = 0,$level = 1){
// 新的数组存放按层级排好序的类别
$newarr = array();
// 深度优先遍历
// 遍历所有同一层级的父级分类(即$pid相同的分类)
foreach($data as $k => $v) {
if($v['pid'] == $pid){
$v['level'] = $level; // 层级
$newarr[] = $v;
// array_merage():合并一个或多个数组
// 递归遍历$data,查找$pid等于$v['id']的子类
$newarr = array_merge($newarr,category($data,$v['id'],$level + 1));
}
}
return $newarr;
}
$newarr = category($data,0,1);
foreach($newarr as $v) {
$space = str_repeat(' - ',$v['level']-1);
echo $space.$v['city'].'<br />';
}
$data 是从数据库中取出来的分类。涉及到两个PHP内置函数:array_merge()和str_repeat()。
版权归 马富天PHP博客 所有
本文标题:《PHP使用递归实现无限分类》
本文链接地址:http://www.mafutian.net/73.html
转载请务必注明出处,小生将不胜感激,谢谢! 喜欢本文或觉得本文对您有帮助,请分享给您的朋友 ^_^
顶0
踩0
评论审核未开启 |