一个基本的区别是isset()可用于数组和变量,而array_key_exits()只能用于数组。
但是最主要的区别在于在设定的条件下的返回值。
array_key_exists()
array_key_exists() 会检查键值的存在. 这个函数会返回TRUE,只要键值存在,即使值为NULL.
$arr = array( "one"=>"1", "two"=>"2", "three"=>null );
array_key_exists("one", $arr); // true
array_key_exists("two", $arr); // true
array_key_exists("three", $arr); // true
isset()
和arrry_key_exitst()不同,isset()会同时检查键和值,只有当健存在,对应的变量不为NUll的时候才会返回TURE。
$arr = array( "one"=>"1", "two"=>"2", "three"=>null );
isset($arr["one"]); // true
isset($arr["two"]); // true
isset($arr["three"]); // false
isset和array_key_exits执行效率
isset() > array_key_exists() > in_array()
数据量越大,性能差距越大
isset() 和 array_key_exists() 性能
也就是说,isset()+!is_null() 可以实现array_key_exists()的效果
isset() AND !is_null()
isset() 和 array_key_exists() 性能测试结果(1)
array_key_exists : 2.61410689354
is_set : 0.0547709465027
isset() + array_key_exists : 0.0560970306396
isset AND !is_null: 0.909719944
isset() 和 array_key_exists() 性能测试结果(2)
<?php
$a = array('a'=>1,'b'=>2,'c'=>3,'d'=>4, 'e'=>null);
$s = microtime(true);
for($i=0; $i<=100000; $i++) {
$t= array_key_exists('a', $a); //true
$t= array_key_exists('f', $a); //false
$t= array_key_exists('e', $a); //true
}
$e = microtime(true);
echo 'array_key_exists : ', ($e-$s);
$s = microtime(true);
for($i=0; $i<=100000; $i++) {
$t = isset($a['a']); //true
$t = isset($a['f']); //false
$t = isset($a['e']); //false
}
$e = microtime(true);
echo 'is_set : ' , ($e-$s);
$s = microtime(true);
for($i=0; $i<=100000; $i++) {
$t= (isset($a['a']) || array_key_exists('a', $a)); //true
$t= (isset($a['f']) || array_key_exists('f', $a)); //false
$t= (isset($a['e']) || array_key_exists('e', $a)); //true
}
$e = microtime(true);
echo 'isset() + array_key_exists : ', ($e-$s);
?>
array_key_exists() : 308 ms
is_set() : 4.7ms
isset() + array_key_exists() :217ms
网友评论