递归函数永远不会返回我的临时数组

时间:2015-11-18 03:09:58

标签: php recursion return

我假设我的循环保持循环并清除我的临时数组,但不知道如何解决这个问题。最后,返回始终为空。

如何正确返回temp数组?

数据集:

Array(
    [0] => Array(
            [0] => Array(
                    [id] => 55
                    [parent] => 49
                )
            [1] => Array(
                    [id] => 62
                    [parent] => 50
                )
            [2] => Array(
                    [id] => 64
                    [parent] => 51
                )
        )
    [1] => Array(
            [0] => Array(
                    [id] => 49
                    [parent] => 0
                )
        )
)

功能:

<?php

    $patterns = function($array, $temp = array(), $index = 0, $parent = 0) use(&$patterns) {
        if($index < count($array)) {
            foreach($array[$index] as $sub) {
                if($index == 0 || $parent == $sub['id']) {
                    $temp[$index] = $sub['id'];
                    $patterns($array, $temp, $index + 1, $sub['parent']);
                }
            }
        }

        if($index >= count($array) && $parent == 0) {
            print_r($temp); // correct result does display here!

            return $temp; // this return gives no return
        }
    };

    print_r($patterns($dataset));

?>

print_r返回Array ( [0] => 55 [1] => 49 )

2 个答案:

答案 0 :(得分:1)

在第8行,只有在$patterns($array, $temp, ...)不为空时才返回$temp的结果。另外,不要将结果设置为$temp2 = $patterns($array, $temp, $index + 1, $sub['parent']); if (isset($temp2)) { return $temp2; } 变量,因此如果结果为null,则不要覆盖它。

像这样:

// correct result does display here!

如果第13行的条件失败,它将返回null,并且这不是你想要的结果,所以如果它是null,你必须继续。

顺便说一下,我无法重现您的代码,并在foreach($array[$index] as $key => $sub) { if ($key == 0 || $parent == $sub['id']) { 处给出了正确的答案。为了使它工作,我不得不改变第5和第5行。 6到:

if($index >= count($array)-1 && $parent == 0) {

我还必须将第13行更改为:

Object::add_extension("LeftAndMain", "HTMLEditorConfigSubsitesInit");

答案 1 :(得分:0)

修改第6行并添加&#34;返回&#34;到它的开头?

    RETURN $patterns($array, $temp, $index + 1, $sub['parent']);