Я хотел добавить свои 2 цента по этому вопросу, так как мне не хватало среднего пути.
Как уже было сказано, isset()будет оцениваться значение ключа, поэтому он вернется, falseесли это значение будет nullгде array_key_exists(), только проверит, существует ли ключ в массиве.
Я выполнил простой тест с использованием PHP 7, показанный результат - это время, которое потребовалось для завершения итерации:
$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
Я добавил результаты этой пользовательской функции в этот тест, а также для завершения:
function array_key_isset($k, $a){
return isset($a[$k]) || array_key_exists($k, $a);
}
Как видно и уже сказано, isset()это самый быстрый метод, но он может вернуть false, если значение равно null. Это может дать нежелательные результаты, и обычно следует использовать, array_key_exists()если это так.
Однако есть средний выход, и он использует isset() || array_key_exists(). Этот код, как правило, использует более быструю функцию, isset()и если isset() возвращает только ложь, используйте array_key_exists()для проверки. Показанный в таблице выше, это так же быстро, как просто звонить isset().
Да, это немного больше, чтобы написать и обернуть его в функцию медленнее, но намного проще. Если вам это нужно для повышения производительности, проверки больших данных и т. Д., Запишите их полностью, в противном случае, если их однократное использование приводит к незначительным перегрузкам в работе array_key_isset(), незначительным.