array_key_exists - sprawdza, czy podany klucz lub indeks istnieje w tablicy.
bool array_key_exists ( mixed $klucz , array $tablica )
array_key_exists() zwraca TRUE jeśli podany klucz jest znaleziony w tablicy. Klucz może być dowolną wartością możliwą dla indeksu tablicy. Funkcja szuka kluczy tylko w pierwszym wymiarze tablicy. Klucze zagnieżdżone w tablicach wielowymiarowych nie zostaną znalezione. Różnica w działaniu pomiędzy tą funkcją a isset() - isset() nie zwraca TRUE dla kluczy przypisanych do wartości NULL, podczas gdy array_key_exists() tak.
$tablica = array('piąty' => 1, 'drugi' => 4); if (array_key_exists('piąty', $tablica)) { echo "Element 'piąty' istnieje w tablicy."; }
Otrzymamy: Element 'piąty' istnieje w tablicy,
$tablica = array('pierwszy' => null, 'drugi' => 4); // zwraca false $c = isset($tablica['pierwszy']); var_dump($c); echo '<br>'; // zwraca true $c = array_key_exists('pierwszy', $tablica); var_dump($c);
Otrzymamy ze względu na null:
bool(false) bool(true)
Jeśli chcemy wykorzystać zalety wydajności isset () przy prawidłowym wykrywaniu elementu NULL, należy stosować:
if (isset(..) || array_key_exists(...)) { ... }
W dodatku dla tablic posiadających ponad 100 kluczy, wykonywanie tej funkcji jest ekstremalnie wolne - wtedy warto poszukać alternatywnego rozwiązania, chocby na bazie innych funkcji: isset($array($key))
Często wymogiem prawidłowego zadziałania funkcji jest zresetowanie tablicy przed wywołaniem:
reset($array); array_key_exists($needle,$array);
Przy użyciu tej funkcji należy zwrócić uwagę na swoistą zwodniczość istnienia kluczy, gdzie gdy wydaje się nam, że nasza tablica wygląda jak poniżej, lecz:
$array = array(null => 1, false => 2, true => 3, 4.6 => 4, "08" => 5, "8" => 6); var_export($array); echo '<br>'; echo "nnull is " . (array_key_exists(null, $array) ? '' : 'not ') . "a key.n"; echo '<br>'; echo 'false is ' . (array_key_exists(false, $array) ? '' : 'not ') . "a key.n"; echo '<br>'; echo 'true is ' . (array_key_exists(true, $array) ? '' : 'not ') . "a key.n"; echo '<br>'; echo '4.6 is ' . (array_key_exists(4.6, $array) ? '' : 'not ') . "a key.n"; echo '<br>'; echo '"08" is ' . (array_key_exists("08", $array) ? '' : 'not ') . "a key.n"; echo '<br>'; echo '"8" is ' . (array_key_exists("8", $array) ? '' : 'not ') . "a key.n"; echo '<br>';
wynikiem badania kluczy są trzy błędy oraz:
array ( '' => 1, 0 => 2, 1 => 3, 4 => 4, '08' => 5, 8 => 6, ) null is a key. false is not a key. true is not a key. 4.6 is not a key. "08" is a key. "8" is a key.
Tak więc należy zawsze na to uważać.
Weźmy na przykład adres strony pochodzący z formularza np. index.php?register
By ustalić, jaki parametr ma być brany pod uwagę, np. rejestracja czy może logowanie, czy też przekierowanie na stronę główną, wystarczy:
if( array_key_exists( 'home',$_GET ) ) { echo "Home - its where the heart is."; } else if( array_key_exists( 'login',$_GET ) ) { echo "Login code here!"; } else if( array_key_exists( 'register',$_GET ) ) { echo "Register code here!"; } else { echo "Home - its where the heart is."; }