【问题标题】:PHP array_key_exists and is not emptyPHP array_key_exists 并且不为空
【发布时间】:2017-06-30 07:40:35
【问题描述】:

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

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

【问题讨论】:

  • 我不确定我是否理解你,但是if($needle == "") return false;?

标签: php array-key-exists


【解决方案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,以防万一。我认为它仍然可以增强,但这确实有效。

【讨论】:

    【解决方案2】:

    改用这种方法。更简单!

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

    【讨论】:

    • 该手册对 array_walk_recursive 进行了说明:“您可能会注意到键 'sweet' 从未显示。任何包含数组的键都不会传递给函数。”
    • 在这种情况下,您应该考虑使用递归迭代器。试试这个post
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-21
    • 1970-01-01
    • 1970-01-01
    • 2010-12-05
    • 1970-01-01
    相关资源
    最近更新 更多