继上一个问题之后,我现在使用以下函数来检查多维数组中是否存在某个键...
function array_key_exists_r($needle, $haystack) {
$result = array_key_exists($needle, $haystack);
if ($result)
return $result;
foreach ($haystack as $v) {
if (is_array($v) || is_object($v))
$result = array_key_exists_r($needle, $v);
if ($result)
return $result;
}
return $result;
}
我这样检查......
if (array_key_exists_r("image",$myarray)) {
echo 'Array Key Image Exists';
}
但是现在我正在尝试修改它或结果以检查该键是否为空,我可以在函数内部执行此操作还是应该对函数的输出执行某些操作?
或者我应该使用isset吗?
答案 0 :(得分:1)
无论您是否在功能内部执行此操作,它都完全取决于您。就个人而言,如果我在函数内部进行了操作,我会将其名称更改为更清晰的名称,因为它不会检查密钥是否存在。无论如何,我在同一个功能中找到了一个解决方案:
function array_key_exists_r($needle, $haystack){
$result = array_key_exists($needle, $haystack);
if ($result && $haystack[$needle]){
return $result;
}
foreach ($haystack as $v)
{
if (is_array($v) || is_object($v)){
$result = array_key_exists_r($needle, $v);
if ($result) {
return $result;
}
}
}
return false;
}
所以基本上我在你的ifs上添加了一个验证,并且它也将默认返回值更改为false以防万一。我认为它仍然可以增强,但这可以起到作用。
答案 1 :(得分:0)
请尝试这种方法。容易!
function array_key_exists_r($needle, $haystack) {
$found = [];
array_walk_recursive($haystack, function ($key, $value) use (&$found) {
# Collect your data here in $found
});
return $found;
}