isset
或array_key_exist
适合使用的位置?
就我而言,两者都在发挥作用。
if( isset( $array['index'] ) {
//Do something
}
if( array_key_exists( 'index', $array ) {
//Do something
}
答案 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>