Я хотел добавить свои 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()
возвращает false только тогда использует array_key_exists()
для проверки. Как показано в таблице выше, это так же быстро, как и простой вызов isset()
.
Да, это немного больше, написать и обернуть его в функцию медленнее, но намного проще. Если вам это нужно для повышения производительности, проверки больших данных и т. Д., Запишите их полностью, в противном случае, если их однократное использование с очень незначительными издержками в функции array_key_isset()
незначительно.