Где подходит 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
или нет.