示例:我正在检查是否存在这样的数组元素:
if (!self::$instances[$instanceKey]) {
$instances[$instanceKey] = $theInstance;
}
但是,我不断收到此错误:
Notice: Undefined index: test in /Applications/MAMP/htdocs/mysite/MyClass.php on line 16
当然,我第一次想要实例时,$instances 不会知道 key 。我猜我对可用实例的检查是错误的?
最佳答案
您可以使用语言构造 isset
或函数 array_key_exists
。
isset
应该快一点(因为它不是一个函数),但是如果元素存在并且值为 NULL
.
例如,考虑这个数组:
$a = array(
123 => 'glop',
456 => null,
);
而这三个测试,依赖于 isset
:
var_dump(isset($a[123]));
var_dump(isset($a[456]));
var_dump(isset($a[789]));
第一个会得到你(元素存在,并且不为空):
boolean true
虽然第二个会得到你(元素存在,但为空):
boolean false
最后一个会得到你(元素不存在):
boolean false
另一方面,像这样使用 array_key_exists
:
var_dump(array_key_exists(123, $a));
var_dump(array_key_exists(456, $a));
var_dump(array_key_exists(789, $a));
你会得到这些输出:
boolean true
boolean true
boolean false
因为,在前两种情况下,元素存在——即使在第二种情况下它为 null。而且,当然,在第三种情况下,它不存在。
对于像你这样的情况,我通常使用 isset
,考虑到我从来没有在第二种情况下......但是现在选择使用哪一个取决于你;-)
例如,您的代码可能会变成这样:
if (!isset(self::$instances[$instanceKey])) {
$instances[$instanceKey] = $theInstance;
}
关于php - 如何检查数组元素是否存在?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1966169/