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
相关产品推荐
相关产品推荐

