经过两个小时的摸索和谷歌搜索——我被困住了!
按照标题,我试图返回一个在函数循环时建立的数组。我只想在 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/