php如何实现递归以及后续数据操作

$items = array( 1 => array('id' => 1, 'pid' => 0, 'name' => '安徽省'), 2 => array('id' => 2, 'pid' => 0, 'name' => '浙江省'), 3 => array('id' => 3, 'pid' => 1, 'name' => '合肥市'), 4 => array('id' => 4, 'pid' => 3, 'name' => '长丰县'), 5 => array('id' => 5, 'pid' => 1, 'name' => '安庆市'), 6 => array('id' => 6, 'pid' => 2, 'name' => '浙江市区'), );

有这样一组简略数据;

需求如下:1.要求按省划分不同的组,即安徽省下面所有市区的id为一个数组,浙江省下所有的市区id为一个数组;当然还有其他省份;国家里面包含省份,省份里面包含市区,就是这样的一个二维数组;

以下实现步骤:

1.调用以下方法获取到树状图(此时如果$id为0,那就只会得到一个省份的树状图,那么只能根据省的id去获取)

注意:里面用到了类的静态属性而不是方法内的静态属性,原因如下:方法内的静态属性,在方法调用完毕不会消失;而在类内用foreach调用此法,则会造成数据重复;如果不用静态属性又肯定不行,因为是递归调用的,这个时候就考虑使用类的静态属性,foreach调用完毕后,再给静态属性赋值为空

public function getSon($id,$array){

foreach ($array as $k => $v) {

if($v['pid']== $id){

self::$arr_11[]= $array[$k];

            self::getSon($v['id'],$array);

        }

}

return self::$arr_11 ;

}


以下方法调用并得到数组

public function heheOp()

{

$items = array(

1 => array('id' => 1, 'pid' => 0, 'name' => '安徽省'),

            2 => array('id' => 2, 'pid' => 0, 'name' => '浙江省'),

            3 => array('id' => 3, 'pid' => 1, 'name' => '合肥市'),

            4 => array('id' => 4, 'pid' => 3, 'name' => '长丰县'),

            5 => array('id' => 5, 'pid' => 1, 'name' => '安庆市'),

            6 => array('id' => 6, 'pid' => 2, 'name' => '浙江市区'),

        );

        $arr=array();

        $arr1=array();

        foreach ($items as $k=>$v){

if($v['pid']==0){

$arr1[]=$v['id'];//此处是将省份的id放到市区id的最后面作为省份标记,当然也可以放到数组外作为三维数组,但是比较麻烦,我就直接把省份id和市区id放一起

            }

}

//        $arr[]=$this->getSon(1,$items);

        foreach ($arr1 as$k =>$v){

//            var_dump($arr);die;

            $arr[$k]=$this->getSon($v,$items);

            $arr[$k][]=$v;

            self::$arr_11=array();

        }

$arr2=array();

        foreach ($arr as $k=>$v){

$str=end($v).',';

            foreach ($v as $k1=>$v1){

if(is_array($v1)){

$str.=$v1['id'].',';

                }

}

$arr2[]=trim($str);

        }

print_r($arr2);die;

        return $arr;

    }

最后得到结果如下

Array

(

    [0] => 1,3,4,5

    [1] => 2,6

)

你可能感兴趣的:(php如何实现递归以及后续数据操作)