Isset vs array_key_exists

Onde é que isset ou array_key_exist adequados para usar?

No meu caso, ambos estão funcionando.

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

Veja: http://us3.php.net/array_key_exists

isset() não retorna TRUE para as chaves da matriz que correspondem a um valor NULL , enquanto array_key_exists() faz.

Para expandir a excelente resposta de Mantas, que descreve a diferença comportamental do código:

  • Use array_key_exists se quiser descobrir se essa chave existe na matriz, independentemente de ela contiver um valor ou não.
  • Use isset se quiser descobrir se a chave existe em uma matriz e tem um valor de significado. Observe que isset retornará false para valores NULL .

A diferença semântica descrita acima leva à diferença comportamental descrita por Mantas.

O seguinte código:

 $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"; 

Saídas:

 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) 

Um efeito secundário é que uma chave que retorna “falso” do isset ainda pode ser incluída como chave em um para cada loop, como em

 foreach( $array as $key => value ) 

Na minha opinião, se você definitivamente irá aprofundar o uso de arrays

Eu sugiro usar array_key_exists() apenas acompanhou-o com algumas funções de matriz úteis

apenas como array_filter() . Além disso, o fato de que as funções de matriz são criadas é por causa de arrays e facilidade de uso isset() seria ter seu melhor lugar para usar como, por exemplo, verificar existência variável. . Ou então há muitas mais funções para explorar para os arrays usar lá fora.

Mas, afinal, seria verdadeiramente depende de você o resultado que você está tentando esperar, quer você quer uma array() com NULL ou não.