首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何检查数组元素是否存在?

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

Stack Overflow用户
提问于 2009-12-27 23:12:47
回答 8查看 142.7K关注 0票数 63

示例:我检查数组元素是否存在,如下所示:

代码语言:javascript
复制
if (!self::$instances[$instanceKey]) {
    $instances[$instanceKey] = $theInstance;
}

然而,我一直收到这个错误:

通知:未定义索引:在/Applications/MAMP/htdocs/mysite/MyClass.php的第16行进行测试

当然,当我第一次想要一个实例时,$instances不会知道密钥。我想我对可用实例的检查是错误的?

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2009-12-27 23:18:14

您可以使用语言构造isset,也可以使用函数array_key_exists

isset应该快一点(因为它不是一个函数),但是如果元素存在并且值为NULL,它将返回false。

例如,考虑以下数组:

代码语言:javascript
复制
$a = array(
    123 => 'glop', 
    456 => null, 
);

这三个测试依赖于isset

代码语言:javascript
复制
var_dump(isset($a[123]));
var_dump(isset($a[456]));
var_dump(isset($a[789]));

第一个将得到结果(元素存在,并且不为空):

代码语言:javascript
复制
boolean true

而第二个将得到您(元素存在,但为空):

代码语言:javascript
复制
boolean false

最后一个会得到你(这个元素不存在):

代码语言:javascript
复制
boolean false

另一方面,像这样使用array_key_exists

代码语言:javascript
复制
var_dump(array_key_exists(123, $a));
var_dump(array_key_exists(456, $a));
var_dump(array_key_exists(789, $a));

你会得到这些输出:

代码语言:javascript
复制
boolean true
boolean true
boolean false

因为,在前两种情况下,元素是存在的--即使在第二种情况下它是空的。当然,在第三种情况下,它并不存在。

对于像你这样的情况,我通常使用isset,考虑到我从来没有遇到过第二种情况……但选择使用哪一个现在由您决定;-)

例如,您的代码可能如下所示:

代码语言:javascript
复制
if (!isset(self::$instances[$instanceKey])) {
    $instances[$instanceKey] = $theInstance;
}
票数 112
EN

Stack Overflow用户

发布于 2011-10-05 17:49:04

与isset()相比,array_key_exists()比较慢。这两者的组合(参见下面的代码)会有所帮助。

它利用isset()的性能优势,同时维护正确的检查结果(即,即使数组元素为空也返回TRUE )。

代码语言:javascript
复制
if (isset($a['element']) || array_key_exists('element', $a)) {
       //the element exists in the array. write your code here.
}

基准比较:(摘自下面的博客文章)。

代码语言:javascript
复制
array_key_exists() only : 205 ms
isset() only : 35ms
isset() || array_key_exists() : 48ms

请参阅http://thinkofdev.com/php-fast-way-to-determine-a-key-elements-existance-in-an-array/http://thinkofdev.com/php-isset-and-multi-dimentional-array/

以供详细讨论。

票数 27
EN

Stack Overflow用户

发布于 2009-12-27 23:15:13

您可以使用函数array_key_exists来执行此操作。

例如,

代码语言:javascript
复制
$a=array("a"=>"Dog","b"=>"Cat");
if (array_key_exists("a",$a))
  {
  echo "Key exists!";
  }
else
  {
  echo "Key does not exist!";
  }

PS :取自here的例子。

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1966169

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档