Где isset
или array_key_exist
подходит для использования?
В моем случае оба работают.
if( isset( $array['index'] ) {
//Do something
}
if( array_key_exists( 'index', $array ) {
//Do something
}
Где isset
или array_key_exist
подходит для использования?
В моем случае оба работают.
if( isset( $array['index'] ) {
//Do something
}
if( array_key_exists( 'index', $array ) {
//Do something
}
Смотрите: http://us3.php.net/array_key_exists
isset()
не возвращаетTRUE
для ключей массива, которые соответствуют значениюNULL
, аarray_key_exists()
-.
Развернуть на Mantas отличный ответ, в котором описывается поведенческая разница кода:
array_key_exists
, если вы хотите узнать, существует ли этот ключ в массиве, независимо от того, содержит ли оно значение или нет.isset
, если вы хотите узнать, существует ли ключ в массиве и имеет значение в нем смысла. Обратите внимание, что isset
вернет значение false для значений NULL
.Различия в семантике, описанные выше, приводят к различию в поведении, описанному 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)
Побочным эффектом является то, что ключ, который возвращает "false" из isset, все равно может быть включен как ключ в для каждого цикла, как в
foreach( $array as $key => value )
По-моему, если вы, безусловно, пойдете через использование arrays
Я предлагаю использовать array_key_exists()
просто сопровождал его некоторыми полезными функциями массива
как array_filter()
. Также факт, что функции массива созданы из-за массивов и простоты использования isset()
, будет иметь лучшее место для использования, например, для проверки переменной существование., Или иначе у вас есть еще много функций для поиска arrays
.
Но ведь все зависит от вас, какой результат вы ожидаете от того, хотите ли вы array()
с NULL
или нет.