Isset vs array_key_exists

Где подходит 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, все равно может быть включен как ключ в a для каждого цикла, как в

 foreach( $array as $key => value ) 

На мой взгляд, если вы определенно пройдете через использование arrays

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

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

Но в конце концов, это будет действительно зависеть от вас, в каком результате вы пытаетесь ожидать, что вы хотите array() с NULL или нет.