Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/285.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.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 有没有办法检查函数中数组键的存在性_Php_Arrays_Variables_Isset_Array Key Exists - Fatal编程技术网

Php 有没有办法检查函数中数组键的存在性

Php 有没有办法检查函数中数组键的存在性,php,arrays,variables,isset,array-key-exists,Php,Arrays,Variables,Isset,Array Key Exists,我有一个项目,我需要回显$variable['key'] 有时$variable['key']不存在。当我回显$variable['key']时,这些变量会产生错误;直接的 我目前的方法是 echo (isset($variable['key'])) ? $variable['key'] : ''; 这不是一种非常有效的方法。我不想把所有的键都写两遍 我需要一个函数。基本上是检查$Variable['key']函数内部并返回其值 function get_ifisset(&$var =

我有一个项目,我需要回显$variable['key']

有时$variable['key']不存在。当我回显$variable['key']时,这些变量会产生错误;直接的

我目前的方法是

echo (isset($variable['key'])) ? $variable['key'] : '';
这不是一种非常有效的方法。我不想把所有的键都写两遍

我需要一个函数。基本上是检查$Variable['key']函数内部并返回其值

function get_ifisset(&$var = null){
if(isset($var)){ return $var; }
}

echo get_ifisset($vars['key']);
但是由于$variable['key']不存在,我无法将它们发送到函数内部

这种用法会引发“未定义键”错误

下面的函数也是我不喜欢的另一种方法

function get_ifisset($var, $key){
if(array_key_exists($key, $GLOBALS[$var])){ return $GLOBALS[$var][$key]; }
}
我想了解是否有任何方法可以检查函数中数组键的存在性


属性_存在();数组_键_存在();isset()

您可以将数组、键和默认值传递给函数:

public function getValue($array, $key, $default = '') {
    return isset($array[$key]) ? $array[$key] : $default;
}

$this->getValue($variable, 'key');
public function getValue($array, $key, $default = '') {
    if(!is_array($key)) {
        return isset($array[$key]) ? $array[$key] : $default;
    }
    $arr = & $array;
    foreach($key as $subkey) {
        if(!isset($arr[$subkey])) {
            return $default;
        }
        $arr = & $arr[$subkey];
    }
    return $arr;
}

另外,根据我的经验,
函数get\u ifisset(&$var)
不会抛出任何错误(我没有将其默认设置为null)。

修改@Justinas函数:

public function getValue($array, $key, $default = '') {
    return isset($array[$key]) ? $array[$key] : $default;
}

$this->getValue($variable, 'key');
public function getValue($array, $key, $default = '') {
    if(!is_array($key)) {
        return isset($array[$key]) ? $array[$key] : $default;
    }
    $arr = & $array;
    foreach($key as $subkey) {
        if(!isset($arr[$subkey])) {
            return $default;
        }
        $arr = & $arr[$subkey];
    }
    return $arr;
}
因此,您可以在多维数组上使用它

getValue($array, "key");

getValue($array, Array("key", "subkey", "subsubkey"));

“另一种方法”有什么问题?你为什么不喜欢呢?有两种方法:像个好孩子一样使用
isset
,或者禁用
E\u NOTICE
警告(这很糟糕)@Peter你认为这有效吗?老实说。我没有注意到警告。我知道这是个坏习惯,但我不在乎。我的生活轻松多了。如果你不懒惰****就像我一样到处使用
isset()
。@lolka_bolka我不喜欢,因为我不能检查$var['notexist']['notexistanother'];用这个。这也会引发错误:未定义索引。谢谢您的回答,但这种方法也不能检查$var['notexist']['notexistanother'];如果我尝试发送$this->getValue($var['notexist'],'notexistanother')@DenizPorsuk,您可以修改,如果您将
$key
作为数组传递,它将检查多维键。例如
getValue($array,array(“key”,“subkey”,“subkey”),“”)@Peter这真是个不错的主意。它适用于打印(getValue($test['key'],Array(“key2”));但不适用于打印(getValue($test['notexist'],数组(“key2”))@DenizPorsuk这就是你应该如何使用它。。。因为这就是重点。。。