PHP - 从递归函数返回数组时出错

标签 php recursion

经过两个小时的摸索和谷歌搜索——我被困住了!

按照标题,我试图返回一个在函数循环时建立的数组。我只想在 else 上返回数组变量,但它不会合作。它只是从函数中返回为空白,但是在 else 中我可以打印它并按预期显示。它只是不会返回 $open_array 变量中的数组。任何想法(或滥用)将不胜感激!

function find_parent($number, $open = false) {
   if(isset($other_variable[$number])) {
        foreach($other_variable[$number] as $val) {
           $open[$val->id] = [$val->id;
           $open = find_parent([$val->id, $open);

        }
   }
   else {
    return $open;
   }
}

$open_array = find_parent($number);
print_r($open_array);

最佳答案

在“then”部分,您将赋值给 $open,但之后永远不会返回该值。所以你真的不能指望得到什么东西,除非你输入了 else 部分,但它是一个未更改的版本。

所以这就是我要做的:我会使用一个永远不返回 $open 的版本。 在调用函数之前初始化 $open。 传下去。 然后根据需要进行修改。

没有理由真的返回这个 $open 值,因为无论如何你都是通过引用传递它的,也就是说,它应该始终是你正在操作的同一个对象(在那些情况下,它可能不是一个错误)。

这样,您就可以专注于调用和返回的流逻辑,并确保您始终使用相同的数据结构。

更新

function find_parent($number, $open = false) { 
   if(isset($other_variable[$number])) { 
        foreach($other_variable[$number] as $val) { 
           $open[$val->id] = [$val->id; 
           $open = find_parent([$val->id, $open); 
           return $open; // INSERTED
        } 
   } 
   else { 
    return $open; 
   } 
} 

关于PHP - 从递归函数返回数组时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3483201/

相关文章:

php - 如何通过php从mysql数据库获取单个参数?

javascript - 如何通过代码更改 paypal 按钮上的重定向页面

php - 正则表达式,如何在 PHP 中添加更多匹配条件

c# - 在 C# 中使用递归打印从 A-Z 的字母

java - 如何使用自下而上递归构建 n=3 的情况?

php - 如何在使用 imagerotate() 旋转图像后获得新的宽度和高度?

javascript - 增加一个字符串。 (JS 或 PHP)

Java 字符递归

c++ - 使用递归将所有可能的组合(重复)作为数组中的值

php - 组合递归迭代器结果 : children with parents