Я хотел добавить свои 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()
, незначительным.