0

这是多维数组:

$group_tree =  Array
   (
    [1] => Array
        (
            [id] => 1   
            [children] => Array
                (
                    [6] => Array
                        (
                            [id] => 6

                            [children] => Array
                                (
                                    [7] => Array
                                        (
                                            [id] => 7

                                            [children] => Array
                                                (
                                                )

                                        )


                                )

                        )

                )

        )


)

这是我使用的递归函数( $group_id = 6 ):

  public static function sub_group_tree( $group_tree , $group_id )
    {   

        foreach ( $group_tree as $key => $value ) { 

            echo  "<br>key : $key and group id is $group_id <br>"  ;

            if( (int) $key == $group_id ) {

                echo "check";

                return $value;

            }

            if( count($value['children']) ){            

                Group::sub_group_tree( $value['children'] ,  $group_id  ) ;
            }

        }


    }

奇怪的是,我将“return”返回为 null ,但如果我使用“die($value)”而不是“return”,那么我将 $value 视为多维数组的正确部分。看起来“return”并没有打破循环,尽管条件已满,但循环继续,“check”这个词将在函数返回值的测试中打印出来。看结果:

key : 1 and group id is 6 
key : 6 and group id is 6 
check
null

我在 php 5.4 上使用 Laravel

4

2 回答 2

0

一:你不应该在函数中途返回,你应该设置一个变量,就像$return你想要的值一样,然后return $return在函数结束时。

二:当你递归调用时sub_group_tree,你没有分配一个变量来包含结果,所以该函数的返回是没有意义的......

Group::sub_group_tree( $value['children'] ,  $group_id  ) ;
于 2013-10-22T21:06:59.147 回答
0

尝试这个:

public static function sub_group_tree( $group_tree , $group_id )
{ 

    ...
    if( count($value['children']) ) {
        return Group::sub_group_tree( $value['children'] ,  $group_id  ) ;
    }
    ...

}

sub_group_tree()问题是您没有从if( count($value['children']) ) { }.

于 2013-10-22T21:09:01.383 回答