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個贊
我糾正了你的方法?,F在它如你所愿。您還需要刪除返回的 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 關注
- 89 瀏覽
添加回答
舉報