示例:我正在检查是否存在这样的数组元素:
if (!self::$instances[$instanceKey]) {
$instances[$instanceKey] = $theInstance;
}
但是,我一直收到这个错误:
Notice: Undefined index: test in /Applications/MAMP/htdocs/mysite/MyClass.php on line 16
当然,我第一次想要一个实例时,$ instances将不知道密钥。我想我检查可用实例是错误的吗?
答案 0 :(得分:98)
您可以使用语言构造isset
或函数array_key_exists
。
isset
应该快一点(因为它不是函数),但如果元素存在并且值为NULL
,则返回false。
例如,考虑这个数组:
$a = array(
123 => 'glop',
456 => null,
);
这三项测试依赖于isset
:
var_dump(isset($a[123]));
var_dump(isset($a[456]));
var_dump(isset($a[789]));
第一个会得到你(元素存在,并且不是null):
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;
}
答案 1 :(得分:27)
array_key_exists()是SLOW。这两者的组合(见下面的代码)会有所帮助。
在保持正确的检查结果的同时,它具有isset()的性能优势(即使数组元素为NULL,也返回TRUE)
if (isset($a['element']) || array_key_exists('element', $a)) {
//the element exists in the array. write your code here.
}
基准比较:(摘自以下博客文章)。
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/
详细讨论。
答案 2 :(得分:10)
您可以使用函数array_key_exists
来执行此操作。
例如,
$a=array("a"=>"Dog","b"=>"Cat");
if (array_key_exists("a",$a))
{
echo "Key exists!";
}
else
{
echo "Key does not exist!";
}
PS:取自here的例子。
答案 3 :(得分:6)
你可以使用isset()
来做这件事。
$myArr = array("Name" => "Jonathan");
print (isset($myArr["Name"])) ? "Exists" : "Doesn't Exist" ;
答案 4 :(得分:6)
根据php手册,您可以通过两种方式执行此操作。这取决于你需要检查的内容。
如果要检查数组中是否存在给定的键或索引,请使用 array_key_exists
<?php
$search_array = array('first' => 1, 'second' => 4);
if (array_key_exists('first', $search_array)) {
echo "The 'first' element is in the array";
}
?>
如果要检查数组中是否存在值,请使用 in_array
<?php
$os = array("Mac", "NT", "Irix", "Linux");
if (in_array("Irix", $os)) {
echo "Got Irix";
}
?>
答案 5 :(得分:4)
您想使用array_key_exists函数。
答案 6 :(得分:2)
用于说明// A programmer walked through the parking lot in search of his car
// When he neared it, he reached for his pocket to grab his array of keys
$keyChain = array(
'office-door' => unlockOffice(),
'home-key' => unlockSmallApartment(),
'wifes-mercedes' => unusedKeyAfterDivorce(),
'safety-deposit-box' => uselessKeyForEmptyBox(),
'rusto-old-car' => unlockOldBarrel(),
);
// He tried and tried but couldn't find the right key for his car
// And so he wondered if he had the right key with him.
// To determine this he used array_key_exists
if (array_key_exists('rusty-old-car', $keyChain)) {
print('Its on the chain.');
}
的使用的一个小轶事。
int x = 1 , y = 1 , z = 1 ;
答案 7 :(得分:1)
您还可以将 array_keys 用于出现次数
<?php
$array=array('1','2','6','6','6','5');
$i=count(array_keys($array, 6));
if($i>0)
echo "Element exists in Array";
?>