Chciałem dodać moje 2 centy do tego pytania, ponieważ brakowało mi środkowego wyjścia.
Jak już powiedziano isset()
, obliczy wartość klucza, więc zwróci, false
jeśli ta wartość jest null
gdzie array_key_exists()
, sprawdzi tylko, czy klucz istnieje w tablicy.
Przeprowadziłem prosty test porównawczy przy użyciu PHP 7, pokazane wyniki to czas potrzebny do zakończenia iteracji:
$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
Dodałem wyniki tej funkcji niestandardowej do tego testu porównawczego, aby zakończyć:
function array_key_isset($k, $a){
return isset($a[$k]) || array_key_exists($k, $a);
}
Jak widać i już powiedziano, isset()
jest najszybszą metodą, ale może zwrócić fałsz, jeśli wartość jest null
. Może to dać niepożądane rezultaty i zwykle należy go użyć, array_key_exists()
jeśli tak jest.
Jest jednak środkowe wyjście i to jest używanie isset() || array_key_exists()
. Ten kod generalnie używa szybszej funkcji isset()
i jeśli isset()
zwraca tylko fałsz, użyj array_key_exists()
do walidacji. Pokazane w powyższej tabeli, jest tak samo szybkie, jak zwykłe wywołanie isset()
.
Tak, trochę więcej jest pisanie, a zawijanie go w funkcję jest wolniejsze, ale o wiele łatwiejsze. Jeśli potrzebujesz tego do wydajności, sprawdzania dużych zbiorów danych itp., Zapisz go w całości, w przeciwnym razie, jeśli jest to jednorazowe użycie, bardzo niewielkie obciążenie funkcji array_key_isset()
jest pomijalne.