Eu queria adicionar meus 2 centavos nessa questão, pois estava faltando uma saída intermediária.
Como já foi dito isset()
, avaliará o valor da chave, para que ele retorne false
se esse valor estiver null
onde array_key_exists()
apenas verificará se a chave existe na matriz.
Eu executei uma referência simples usando o PHP 7, os resultados mostrados são o tempo que levou para concluir a iteração:
$a = [null, true];
isset($a[0]) # 0.3258841 - false
isset($a[1]) # 0.28261614 - true
isset($a[2]) # 0.26198816 - false
array_key_exists(0, $a) # 0.46202087 - true
array_key_exists(1, $a) # 0.43063688 - true
array_key_exists(2, $a) # 0.37593913 - false
isset($a[0]) || array_key_exists(0, $a) # 0.66342998 - true
isset($a[1]) || array_key_exists(1, $a) # 0.28389215 - true
isset($a[2]) || array_key_exists(2, $a) # 0.55677581 - false
array_key_isset(0, $a) # 1.17933798 - true
array_key_isset(1, $a) # 0.70253706 - true
array_key_isset(2, $a) # 1.01110005 - false
Adicionei os resultados dessa função personalizada a este benchmark para concluir:
function array_key_isset($k, $a){
return isset($a[$k]) || array_key_exists($k, $a);
}
Como visto e já dito, isset()
é o método mais rápido, mas pode retornar falso se o valor for null
. Isso pode dar resultados indesejados e, geralmente, deve- array_key_exists()
se usar se for esse o caso.
No entanto, existe uma saída intermediária e isso está sendo usado isset() || array_key_exists()
. Esse código geralmente usa a função mais rápida isset()
e, se isset()
retornar falso somente, use array_key_exists()
para validar. Mostrado na tabela acima, é tão rápido quanto chamar claramente isset()
.
Sim, é um pouco mais para escrever e agrupá-lo em uma função é mais lento, mas muito mais fácil. Se você precisar disso para obter desempenho, verifique os big data, etc, escreva-os na íntegra, caso contrário, se o seu uso único for muito pequeno, a sobrecarga na função array_key_isset()
será insignificante.