多维数组函数不会停止在“返回”

时间:2013-10-22 20:51:39

标签: php arrays multidimensional-array laravel-4

这是多维数组:

$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视为多维数组的正确部分。 看起来“返回”不会破坏循环,并且循环继续,尽管条件是填充,单词“check”将在函数返回值的测试中打印。 看结果:

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

我在php 5.4上使用Laravel

2 个答案:

答案 0 :(得分:0)

一:你不应该在函数中途返回,你应该将$return之类的变量设置为你想要的值,然后在结束时设置return $return 功能。

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

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

答案 1 :(得分: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']) ) { }返回结果。