You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP递归函数无法返回值求助:获取选项的祖先节点

递归函数无法返回值的问题排查与解决办法

嘿,我来帮你拆解下这个递归函数的问题,主要是两个关键错误导致它没法正常返回结果:

问题1:递归调用未传递返回值

你在递归调用get_parent_need($hay[$needle], array_keys($hay))的时候,只是执行了这个函数,但没有把它的返回值传递回上层调用。递归的核心逻辑就是要把深层的结果逐层传递到最外层,否则上层调用拿不到最终的返回值,自然就没有输出了。

问题2:递归参数传递错误

递归调用时你把第二个参数改成了array_keys($hay),但函数本身需要传入原数组$hay才能正确检查父项是否存在于数组键中。如果传成键数组,下一层函数里的array_keys($hay)就变成了索引数组的键(比如0、1、2...),完全偏离了原本要查找父项的逻辑。

修正后的代码

function get_parent_need($needle, $hay) {
    // 直接检查当前needle是否是原数组的键,比先取键再判断更高效
    if (array_key_exists($needle, $hay)) {
        // 递归调用时返回结果,同时传递原数组$hay
        return get_parent_need($hay[$needle], $hay);
    } else {
        // 找不到父项时返回当前目标值
        return $needle;
    }
}

这里还把in_array($needle, array_keys($hay))替换成了array_key_exists($needle, $hay),避免了额外生成键数组的开销,逻辑也更直接。现在调用get_parent_need(165, $hay)就能正常返回最终的祖先项啦~

内容的提问来源于stack exchange,提问作者Majid Ali

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 21:37:51