递归获取父类子类

php php 780      收藏
递归获取父类子类

<?php

//递归
//
header("Content-Type: text/html; charset=UTF-8");

$arr = array(  
    array('id'=>1,      'name'=>'河南',        'parent_id'=>0),  
    array('id'=>2,      'name'=>'广东',        'parent_id'=>0),  
    array('id'=>3,      'name'=>'郑州',        'parent_id'=>1),  
    array('id'=>4,      'name'=>'漯河',        'parent_id'=>1),  
    array('id'=>5,      'name'=>'临颍',        'parent_id'=>4),  
    array('id'=>6,      'name'=>'许昌',        'parent_id'=>1),  
    array('id'=>7,      'name'=>'深圳',        'parent_id'=>2),  
    array('id'=>8,      'name'=>'宝安',        'parent_id'=>2),  
    array('id'=>9,      'name'=>'福田',        'parent_id'=>2),  
    array('id'=>10,     'name'=>'龙华',        'parent_id'=>2),  
    ); 

/**
 * 获取所有父类
 * @param  array $arr   总数组
 * @param  int   $pid   父id
 * @return 父类
 */
function get_all_parent($arr,$pid){
    static $newArr;
    foreach ($arr as $key => $value) {
        if($value['id']==$pid){
            $newArr[]=$value;
            $newArr+=get_all_parent($arr,$value['parent_id']);
        }
    }
    return $newArr;
}
/**
 * 获取顶级父类
 * @param  array $arr   总数组
 * @param  int   $pid   父id
 * @return 父类
 */
function get_top_parent($arr,$pid){
    static $newArr;
    foreach ($arr as $key => $value) {
        if($value['id']==$pid){
            if($value['parent_id']== 0){
                $newArr[]=$value;
            }
            $newArr+=get_top_parent($arr,$value['parent_id']);
        }
        
    }
    return $newArr;
}

/**
     * [getChild description]get array all child
     * @param  array $arr 传入数组
     * @param  string $id 传入id
     * @return [type]      array
     */
    function get_child($arr,$id){
        static $newArr = array();
        if(empty($arr)){
            return false;
        }
        foreach($arr as $key=>$value){
            if($value['parent_id']==$id){
                $newArr[] = $value;
                unset($arr[$key]);
                get_child($arr, $value['id']);
            }
        }
        return $newArr;
    }
var_dump(get_all_parent($arr,3));
var_dump(get_top_parent($arr,3));
var_dump(get_child($arr,1));