Я хотів додати свої 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()
це найшвидший метод, але він може повернути помилкове значення, якщо це значення null
. Це може дати небажані результати, і зазвичай це слід використовувати, array_key_exists()
якщо це так.
Однак є середній вихід, який використовується isset() || array_key_exists()
. Цей код, як правило, використовує більш швидку функцію, isset()
і якщо isset()
повертає помилковий, тоді використовуйте array_key_exists()
для перевірки. Показано в таблиці вище, його так само швидко, як і просто дзвінки isset()
.
Так, писати трохи більше, а згортати їх у функції - це повільніше, але набагато простіше. Якщо вам це потрібно для продуктивності, перевірки великих даних тощо, випишіть їх повністю, інакше, якщо його використання одноразово, то дуже незначні накладні витрати у функції array_key_isset()
незначні.