Php Isset vs数组\u密钥\u存在

Php Isset vs数组\u密钥\u存在,php,arrays,Php,Arrays,isset或array\u key\u存在于哪里适合使用 就我而言,这两种方法都有效 if( isset( $array['index'] ) { //Do something } if( array_key_exists( 'index', $array ) { //Do something } 见: isset()对于对应于NULL值的数组键不返回TRUE,而array\u key\u exists()返回 为了扩展Mantas的优秀答案,该答案描述了代码的行为差异

isset
array\u key\u存在于哪里
适合使用

就我而言,这两种方法都有效

if( isset( $array['index'] ) {
   //Do something
}    


if( array_key_exists( 'index', $array ) {
   //Do something
}
见:

isset()
对于对应于
NULL
值的数组键不返回
TRUE
,而
array\u key\u exists()
返回


为了扩展Mantas的优秀答案,该答案描述了代码的行为差异:

  • 如果要确定该键是否存在于数组中,无论它是否包含值,请使用
  • 如果要确定键是否存在于数组中,并且中是否有意义的值,请使用。请注意,
    isset
    将为
    NULL
    值返回false
上述语义差异导致了Mantas所描述的行为差异

以下代码:

$aTestArray = array();

echo "Before key is created\r\n";
echo "isset:\r\n";
var_dump( isset( $aTestArray['TestKey'] ) );
echo "array_key_exists:\r\n";
var_dump( array_key_exists( 'TestKey', $aTestArray ) );
echo "\r\n";

$aTestArray['TestKey'] = NULL;
echo "Key is created, but set to NULL\r\n";
echo "isset:\r\n";
var_dump( isset( $aTestArray['TestKey'] ) );
echo "array_key_exists:\r\n";
var_dump( array_key_exists( 'TestKey', $aTestArray ) );
echo "\r\n";

$aTestArray['TestKey'] = 0;
echo "Key is created, and set to 0 (zero)\r\n";
echo "isset:\r\n";
var_dump( isset( $aTestArray['TestKey'] ) );
echo "array_key_exists:\r\n";
var_dump( array_key_exists( 'TestKey', $aTestArray ) );
echo "\r\n";
产出:

Before key is created
isset:
bool(false)
array_key_exists:
bool(false)

Key is created, but set to NULL
isset:
bool(false)
array_key_exists:
bool(true)

Key is created, and set to 0 (zero)
isset:
bool(true)
array_key_exists:
bool(true)
一个副作用是,从isset返回“false”的键仍然可以作为键包含在for-each循环中,如中所示

foreach( $array as $key => value ) 

在我看来,如果你一定要深入使用
数组

我建议使用一些有用的数组函数

就像。另外,创建数组函数是因为数组和易用性是最好的选择,例如检查变量是否存在。或者还有更多的函数可供
数组使用

但归根结底,这将真正取决于你想要什么样的结果,或者你想要一个
array()
NULL

还要注意,isset()比array\u key\u exists()要快得多参见@Patrick,