PHP array_key_exists并且不为空

时间:2017-06-29 22:07:23

标签: php array-key-exists

继上一个问题之后,我现在使用以下函数来检查多维数组中是否存在某个键...

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吗?

2 个答案:

答案 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;
}