zoukankan      html  css  js  c++  java
  • php之利用递归写无限极分类

    <?php 
    
    //无限极分类
    //parent 的值,是该栏目的父栏目的id 反之是
    /*0  
    	安徽
    		合肥
    	北京
    	 	海淀
    	 		中关村
    	 		上地
    	 河北
    	 	石家庄
    
    */
    $area = array(
    array('id'=>1,'name'=>'安徽','parent'=>0),
    array('id'=>2,'name'=>'北京','parent'=>0),
    array('id'=>3,'name'=>'海淀','parent'=>2),
    array('id'=>4,'name'=>'中关村','parent'=>3),
    array('id'=>5,'name'=>'合肥','parent'=>1),
    array('id'=>6,'name'=>'上地','parent'=>3),
    array('id'=>7,'name'=>'河北','parent'=>0),
    array('id'=>8,'name'=>'石家庄','parent'=>7),
    );
    
    /*
    1.是找指定栏目的子孙栏目,即子孙树
    2.是找指定栏目的父栏目/父父栏目……顶级栏目,即家谱树
    
    */
    //找子栏目
    function findson($arr,$id=0) {
    	//$id栏目的儿子有哪些呢?
    	//A:数组循环一遍,谁的parent的值 = $id ,谁就是他的儿子
    	$sons = array();	//子栏目数组
    	foreach ($arr as $v) {
    		if ($v['parent'] == $id) {
    			$sons[] = $v;
    		}
    	}
    	return $sons;
    }
    	
    //print_r(findson($area,0));
    
    //找子孙树 静态属性调用
    /*
    在函数中声明的static静态变量
    无论此函数调用多少次,只初始化一次
    以后直接沿用该变量
    在递归时,很有用
    
    static 总结
    1.修饰类的属性与方法为静态属性,静态方法
    2.static::method(),延迟绑定
    3.在函数/方法中,声明静态变量用
    */
    
    function subtree($arr,$id=0,$lev=1) {
    	static $subs = array(); //子孙数组
    	foreach ($arr as $v) {
    		if ($v['parent'] == $id) {
    			$v['lev'] = $lev;
    			$subs[] = $v; //举例说array('id'=>1,'name'=>'安徽','parent'=>0),
    			subtree($arr,$v['id'],$lev+1);
    		}
    	}
    	return $subs;
    }
    
    	/*print_r(subtree($area,0,1));
    $tree = subtree($area,0,1);
    foreach ($tree as $v) {
    	# code...
    	echo str_repeat('  ',$v['lev']),$v['name'],'<br />';
    }
    */
    //第二种不用静态变量
    function subtree2($arr,$id=0,$lev=1) {
    	 $subs = array(); //子孙数组
    	foreach ($arr as $v) {
    		if ($v['parent'] == $id) {
    			$v['lev'] = $lev;
    			$subs[] = $v; //举例说array('id'=>1,'name'=>'安徽','parent'=>0),
    			$subs = array_merge($subs, subtree2($arr,$v['id'],$lev+1));
    		}
    	}
    	return $subs;
    }
    
    $tree = subtree2($area,0,1);
    foreach ($tree as $v) {
    	
    	echo str_repeat('  ',$v['lev']),$v['name'],'<br />';
    }
    
    ?>

  • 相关阅读:
    ThinkPHP5 动态生成图片缩略图
    2020年python学习进阶方向
    2020年一线大厂月薪35K的Python开发要求
    swoole扩展怎么用
    如何在PHP框架里把Traits使用起来
    php与Redis实现一个100万用户的投票项目,如何实现实时查看投票情况?
    PHP高并发和大流量的解决方案
    phper使用MySQL 针对千万级的大表要怎么优化?
    swoole加密可破解吗
    轻松玩转windows之redis实战
  • 原文地址:https://www.cnblogs.com/wang1204/p/5570002.html
Copyright © 2011-2022 走看看