Isset与array_key_exists

时间:2013-11-21 08:54:11

标签: php arrays

issetarray_key_exist适合使用的位置?

就我而言,两者都在发挥作用。

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


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

3 个答案:

答案 0 :(得分:18)

请参阅:http://us3.php.net/array_key_exists

  对于与isset()值对应的数组键,

TRUE不返回NULL,而array_key_exists()则为{{1}}。

答案 1 :(得分:7)

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

  • 如果您想知道数组中是否存在该密钥,请使用array_key_exists,无论该密钥是否包含值。
  • 如果您想了解数据 中是否有值,请使用isset。请注意,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”的键仍然可以作为键包含在每个循环中,如

foreach( $array as $key => value ) 

答案 2 :(得分:0)

在我看来,如果你肯定会深入使用arrays

我建议使用array_key_exists()并附上一些有用的数组函数

就像array_filter()一样。此外,创建数组函数的事实是因为数组和易用性isset()将有最好的位置用作例如检查变量存在。。或者还有很多要探索的功能arrays在那里使用。

但毕竟这真的取决于你的结果是什么,你想要array()NULL或不同。{/ p>