php 无限极递归分类

<?php 

		$array = array(
		array(‘id‘ => 1, ‘pid‘ => 0, ‘name‘ => ‘河北省‘),
		array(‘id‘ => 2, ‘pid‘ => 0, ‘name‘ => ‘北京市‘),
		array(‘id‘ => 3, ‘pid‘ => 1, ‘name‘ => ‘邯郸市‘),
		array(‘id‘ => 4, ‘pid‘ => 2, ‘name‘ => ‘朝阳区‘),
		array(‘id‘ => 5, ‘pid‘ => 2, ‘name‘ => ‘通州区‘),
		array(‘id‘ => 6, ‘pid‘ => 4, ‘name‘ => ‘望京‘),
		array(‘id‘ => 7, ‘pid‘ => 4, ‘name‘ => ‘酒仙桥‘),
		array(‘id‘ => 8, ‘pid‘ => 3, ‘name‘ => ‘永年区‘),
		array(‘id‘ => 9, ‘pid‘ => 1, ‘name‘ => ‘武安市‘),
		);
		// echo "<pre>";
		// var_dump($array);
		function getTree($array, $pid =0, $level = 0){

        //声明静态数组,避免递归调用时,多次声明导致数组覆盖
        static $list = [];
        foreach ($array as $key => $value){
            //第一次遍历,找到父节点为根节点的节点 也就是pid=0的节点
            if ($value[‘pid‘] == $pid){
                //父节点为根节点的节点,级别为0,也就是第一级
                $value[‘level‘] = $level;
                //把数组放到list中
                $list[] = $value;
                //把这个节点从数组中移除,减少后续递归消耗
                unset($array[$key]);
                //开始递归,查找父ID为该节点ID的节点,级别则为原级别+1
                getTree($array, $value[‘id‘], $level+1);

            }
        }
        return $list;
    }

    /*
     * 获得递归完的数据,遍历生成分类
     */
    $array = getTree($array);

    foreach($array as $value){
       echo str_repeat(‘--‘, $value[‘level‘]), $value[‘name‘].‘<br />‘;
    }

?>

  

原文地址:https://www.cnblogs.com/vinzen/p/10641692.html

时间: 2024-10-28 20:17:06

php 无限极递归分类的相关文章

问答项目---递归重新排序无限极子分类数组

递归重新排序无限极子分类数组方法: // 递归重新排序无限极子分类数组 function recursive($array,$pid=0,$level=0){ $arr = array(); foreach ($array as $v) { if($v['pid'] == $pid){ $v['level'] = $level; $v['html'] = str_repeat('--',$level); $arr[] = $v; $arr = array_merge($arr,recursive

PHP 实现无限极栏目分类

首先,创建一个DB CREATE TABLE IF NOT EXISTS `class` ( `id` mediumint(6) NOT NULL AUTO_INCREMENT, `title` varchar(30) NOT NULL, `pid` mediumint(6) NOT NULL DEFAULT '0', PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 然后插入数据 INSERT INTO `class` VALUES

PHP实现无限极分类的两种方式,递归和引用

面试的时候被问到无限极分类的设计和实现,比较常见的做法是在建表的时候,增加一个PID字段用来区别自己所属的分类 $array = array( array('id' => 1, 'pid' => 0, 'name' => '河北省'), array('id' => 2, 'pid' => 0, 'name' => '北京市'), array('id' => 3, 'pid' => 1, 'name' => '邯郸市'), array('id' =>

php递归无限极分类

递归无限级分类有几种形式,我这里只举例比较常用的三种: 第一种:返回有排序的数组: <?php $data = array( 1 => array( 'id' => 1, 'pid' => 0, 'user_name' => 'one', ), 2 => array( 'id' => 2, 'pid' => 1, 'user_name' => 'two', ), 3 => array( 'id' => 3, 'pid' => 1, '

递归与无限极分类

在函数内部调用本身,且在调用时要做判断. 例:输出1~9 function deeploop(&$i=1){   //引用传值,防止递归时从1开始 echo  $i; $i++; if($i < 10){             //条件判断,防止无限递归 deeploop($i); } } 2.无限极分类原理:每次分类都需要记录它的父级id,如果是顶级,则父级id为0,通过父级id,一层一层往下查. 首先从数据库中取出结果集,把结果集中的pid与顶级的pid开始,然后确定顶级父级.依次往下

递归的一些应用(二)无限极分类

用递归的方法实现无限极分类 通常我在写项目的时候,在写一些例如商城分类的时候会实现对应分类的上级分类,或者其它项目部门管理的上级部门的时候一般就会用到无限极分类来进行分类 第一步:首先在数据表设计的时候,如果要实现无限极分类,一般我会在数据表多添加一个字段pid,下面我通过一张新建的数据表来说明一下, (1)建表: -- ---------------------------- -- Table structure for pid -- ----------------------------

PHP无限极分类的实现(不使用递归)

无限极分类在开发中经常使用,例如:部门结构.文章分类.无限极分类的难点在于“输出”和“查询”,例如 将文章分类输出为<ul>列表形式: 查找分类A下面所有分类包含的文章. 1.实现原理 在<无限级分类实现思路>一文中介绍了几种常见的实现方法,各有利弊.其中“改进前序遍历树”数据结构,便于输出和查询,但是在移动分类和常规理解上有些复杂. 2.数据结构 id fid title 1 0 中国 2 1 江苏 3 1 安徽 4 8 江阴 5 3 芜湖 6 3 合肥 7 3 蚌埠 8 2 无

用递归的方法实现无限极分类

通常我在写项目的时候,在写一些例如商城分类的时候会实现对应分类的上级分类,或者其它项目部门管理的上级部门的时候一般就会用到无限极分类来进行分类 第一步:首先在数据表设计的时候,如果要实现无限极分类,一般我会在数据表多添加一个字段pid,下面我通过一张新建的数据表来说明一下, (1)建表: -- ---------------------------- -- Table structure for pid -- ---------------------------- DROP TABLE IF

无限极分类不用递归生成多维数组(树)的方法

最近在项目中碰到的一个实际问题:后台商品分类用的是无限极方法(如图1所示), (图1) 现在前台要根据分类遍历出三级导航(效果如图2所示), (图2) 需要把查询出来的数据处理成多维数组,方便前台用多个foreach嵌套遍历. 网上多方搜集资料.经过验证成功后,记录解决方案如下: 1.从数据库查询出所有数据(项目用的ThinkPHP框架): 2.对数据进行初步处理,使二维数组的"键"与三维数组的id相等,将数据存入新数组$tmp: 1 $info = D('classify')->