PHP中array_key_exists()与isset()以及??的区别

  •   
  • 5435
  • PHP
  • 27
  • super_dodo
  • 2016/11/21

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 '存在数组<hr>';
}else{
	echo '不存在数组<hr>';
}
//结果:存在数组


$arr1 = ['a'=>'AAA','b'=>null];
if(isset($arr1['b'])){
	echo '存在数组子项<hr>';
}else{
	echo '不存在数组子项<hr>';
}
//结果:不存在数组子项

在PHP7中可以使用??(双问号),得到的情况和isset基本一致

$arr = array( "one"=>"1", "two"=>"2", "three"=>null );

$flag = $arr["one"] ?? '不存在';		// 1

$flag = $arr["two"] ?? '不存在';		// 2

$flag = $arr["three"] ?? '不存在';		// 不存在

判断一个值的时候还是需要谨慎,细节地方可能隐藏着看不见的bug.

凭你的智慧,我很难跟你解释!——周星驰