2 回答
TA贡献1824条经验 获得超6个赞
当您进行递归调用时,您会忽略它返回的内容。您应该检查它,看看该调用是否找到了匹配项。
代替:
self::multi_array_key_exists($key,$nested);
和:
$res = self::multi_array_key_exists($key,$nested);if ($res !== false) return $res;
(不要忘记将语句括在大括号中)。
只有当所有递归调用都返回时false你才能安全地return false结束函数体。
一旦这样的递归调用返回一个匹配项,就没有必要在该foreach循环中保持迭代。您可以立即退出,将相同的信息返回给父执行上下文。
另一个问题是,您声明函数返回 a bool,但您希望它有时返回false,有时返回数组(当有匹配项时)。所以那是行不通的。
TA贡献1780条经验 获得超4个赞
我纠正了你的方法。现在它如你所愿。您还需要删除返回的 bool 类型,因为它可以是数组或布尔值。
public static function multi_array_key_exists($key,$array)
{
// if array key exist in this dimension
if (array_key_exists($key,$array)) {
// return the array
return $array;
} else {
// foreach array as nested item
foreach ($array as $nested) {
// if the nested item is an array
if (is_array($nested)) {
// run this function again
$value = self::multi_array_key_exists($key,$nested);
if ($value) {
return $value;
}
}
}
}
return false;
}
- 2 回答
- 0 关注
- 128 浏览
添加回答
举报
