php - 如何检查数组元素是否存在?

标签 php

示例:我正在检查是否存在这样的数组元素:

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/

相关文章:

php - 使用 usort 按多个数组列排序

php - 使用空不能提供正确的结果

php - 如何创建百分比图像

php - 安全的 PHP 登录系统?

php - WordPress 使用工作缩略图重命名附件文件

php - 带有连接和空白行的 mysqli 查询

php 检查该类是否实现接口(interface),而不是其父类

php - 打印二维数组中每列的最大计数

javascript - 我网页上的 PayPal 捐赠确认

php - Drupal - 如何获取行的总和