Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/242.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP数组\u键\u存在且不为空_Php_Array Key Exists - Fatal编程技术网

PHP数组\u键\u存在且不为空

PHP数组\u键\u存在且不为空,php,array-key-exists,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

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

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?

试试这种方法。轻松点

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

是否在函数内部执行此操作完全取决于您。就我个人而言,如果我在函数中使用它,我会将其名称更改为更清晰的名称,因为它不仅检查是否存在密钥。总之,我在同一个函数中找到了一个解决方案:

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以防万一。我认为它仍然可以增强,但这确实起到了作用。

我不确定我是否理解您的意思,但是
如果($needle==“”)返回false手册中陈述了关于ARARYAXWALKYRADION:“您可能注意到键‘甜点’从来没有显示过。任何持有数组的密钥都不会传递给函数。”在这种情况下,您应该考虑使用递归迭代器。试试这个