php教程自学网 - 轻松零基础学php视频教程
条幅广告
当前位置: 主页 > 原生PHP >

php实现无限极分类

时间:2019-08-07 09:46来源:未知 作者:admin 点击:
原始数据 $array = array( array(id = 1, pid = 0, n = 河北省), array(id = 2, pid = 0, n = 北京市), array(id = 3, pid = 1, n = 邯郸市), array(id = 4, pid = 2, n = 朝阳区), array(id = 5, pid = 2, n = 通州区), array(id = 6, pi
原始数据
 
 
$array = array(
    array('id' => 1, 'pid' => 0, 'n' => '河北省'),
    array('id' => 2, 'pid' => 0, 'n' => '北京市'),
    array('id' => 3, 'pid' => 1, 'n' => '邯郸市'),
    array('id' => 4, 'pid' => 2, 'n' => '朝阳区'),
    array('id' => 5, 'pid' => 2, 'n' => '通州区'),
    array('id' => 6, 'pid' => 4, 'n' => '望京'),
    array('id' => 7, 'pid' => 4, 'n' => '酒仙桥'),
    array('id' => 8, 'pid' => 3, 'n' => '永年区'),
    array('id' => 9, 'pid' => 1, 'n' => '武安市'),
    array('id' => 10, 'pid' => 8, 'n' => '永年区镇'),
    array('id' => 11, 'pid' => 0, 'n' => '上海市')
);
 
 
生成无限极分类
 
 
/** 所有的分类
 * @parem $array 数组
 * @parem $pid ,最高级别,默认为0,输出从pid 级别的数据
 * @parem $level 层级,默认0
 * */
function getTree($array, $pid =0, $level = 0){
 
    $f_name=__FUNCTION__; // 定义当前函数名
 
    //声明静态数组,避免递归调用时,多次声明导致数组覆盖
    static $list = [];
 
    foreach ($array as $key => $value){
        //第一次遍历,找到父节点为根节点的节点 也就是pid=0的节点
        if ($value['pid'] == $pid){
            //父节点为根节点的节点,级别为0,也就是第一级
            $flg = str_repeat('|--',$level);
            // 更新 名称值
            $value['n'] = $flg.$value['n'];
            // 输出 名称
            echo $value['n']."<br/>";
            //把数组放到list中
            $list[] = $value;
            //把这个节点从数组中移除,减少后续递归消耗
            unset($array[$key]);
            //开始递归,查找父ID为该节点ID的节点,级别则为原级别+1
            $f_name($array, $value['id'], $level+1);
        }
    }
    return $list;
}
// 调用
$list=getTree($array);
 
调用结果
 
河北省
|--邯郸市
|--|--永年区
|--|--|--永年区镇
|--武安市
北京市
|--朝阳区
|--|--望京
|--|--酒仙桥
|--通州区
 
 
 
(责任编辑:admin)
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
相关推荐