美文网首页
PHP 递归和迭代

PHP 递归和迭代

作者: PHPNOTE | 来源:发表于2017-03-11 15:27 被阅读0次

    博客新开,什么都没有,先从印象笔记贴一篇以前的笔记

    //用于操作的数据
    $area = array(
            array('id'=>1,'name'=>'安徽','parent'=>0),
            array('id'=>2,'name'=>'海淀','parent'=>7),
            array('id'=>3,'name'=>'濉溪县','parent'=>5),
            array('id'=>4,'name'=>'昌平','parent'=>7),
            array('id'=>5,'name'=>'淮北','parent'=>1),
            array('id'=>6,'name'=>'朝阳','parent'=>7),
            array('id'=>7,'name'=>'北京','parent'=>0),
            array('id'=>8,'name'=>'上地','parent'=>2)
        );
    
    //查找子栏目
    function findson($arr,$id=0){
        $sons = array();
        foreach($arr as $k => $v){
            if ($v['parent'] == $id) {
                $sons[] = $v;
            }
        }
        return $sons;
    }
    
    print_r(findson($area,0));die;
    
    //递归查找家谱树
    function familytree($arr,$id){
        $tree = array();
        foreach ($arr as $k => $v) {
            if ($v['id'] == $id) {
                if ($v['parent'] > 0) {
                $tree =array_merge($tree,familytree($arr,$v['parent']));
                }
                $tree[] = $v;
            }
        }
        return $tree;
    }
    print_r(familytree($area,8));
    
    //递归查找子孙树
    function subtree($arr,$id,$lev=1){
        $subs = array();
        foreach($arr as $k => $v){
            if ($v['parent'] == $id) {
                $v['lev'] = $lev;
                $subs[] = $v;
                $subs = array_merge($subs,subtree($arr,$v['id'],$lev+1));
            }
        }
        return $subs;
    }
    print_r(subtree($area,1));
    
    //迭代查找子孙树
    function subtree($arr,$parent=0){
        $task = array($parent);//任务表
        $tree = array();//地区表
        while(!empty($task)){
            $flag = false;
            foreach ($arr as $k => $v) {
                if ($v['parent'] == $parent) {
                    $tree[] = $v;
                    array_push($task,$v['id']);//把最新的地区ID入任务栈
                    $parent = $v['id'];
                    unset($arr[$k]);//把找到的单元UNSET掉
                    $flag = true;
                }
            }
            if ($flag == false) {
                array_pop($task);
                $parent = end($task);
            }
            print_r($task);
        }
        return $tree;
    }
    
    print_r(subtree($area,0));
    

    相关文章

      网友评论

          本文标题:PHP 递归和迭代

          本文链接:https://www.haomeiwen.com/subject/jioagttx.html