PHP中array_key_exists用于检查某个键名是否存在于数组中,而isset也可以用于检测数组中某个键名是否存在,那么二者有什么区别呢?
一个基本的区别是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()
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的方法
$arr1 = [];
if(isset($arr1)){
echo '存在数组
';
}else{
echo '不存在数组
';
}
//结果:存在数组
$arr1 = ['a'=>'AAA','b'=>null];
if(isset($arr1['b'])){
echo '存在数组子项
';
}else{
echo '不存在数组子项
';
}
//结果:不存在数组子项
在PHP7中可以使用??(双问号),得到的情况和isset基本一致
$arr = array( "one"=>"1", "two"=>"2", "three"=>null );
$flag = $arr["one"] ?? '不存在';// 1
$flag = $arr["two"] ?? '不存在';// 2
$flag = $arr["three"] ?? '不存在';// 不存在
判断一个值的时候还是需要谨慎,细节地方可能隐藏着看不见的bug.
凭你的智慧,我很难跟你解释!——周星驰