Isset vs array_key_exists

Где isset или array_key_exist подходит для использования?

В моем случае оба работают.

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


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

Ответ 1

Смотрите: http://us3.php.net/array_key_exists

isset() не возвращает TRUE для ключей массива, которые соответствуют значению NULL, а array_key_exists() -.

Ответ 2

Развернуть на 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 ) 

Ответ 3

По-моему, если вы, безусловно, пойдете через использование arrays

Я предлагаю использовать array_key_exists() просто сопровождал его некоторыми полезными функциями массива

как array_filter(). Также факт, что функции массива созданы из-за массивов и простоты использования isset(), будет иметь лучшее место для использования, например, для проверки переменной существование., Или иначе у вас есть еще много функций для поиска arrays.

Но ведь все зависит от вас, какой результат вы ожидаете от того, хотите ли вы array() с NULL или нет.