2013-07-20 15 views
12

Jak sprawdzić, czy tablica zmiennejSprawdź, czy wartość array isset i jest null

$a = array('a'=>1, 'c'=>null); 

jest ustawiony i jest null.

function check($array, $key) 
{ 
    if (isset($array[$key])) { 
     if (is_null($array[$key])) { 
      echo $key . ' is null'; 
     } 
     echo $key . ' is set'; 
    } 
} 

check($a, 'a'); 
check($a, 'b'); 
check($a, 'c'); 

Czy jest możliwe w PHP posiada funkcję, która sprawdza, czy $ a [ 'c'] jest nieważna i jeśli $ a [ 'b'] istnieć bez "PHP Wskazówka: ..." błędy?

+1

ja nie otrzymuję żadnych zauważ ostrzeżenia za pomocą kodu. – Barmar

Odpowiedz

31

Korzystając array_key_exists() zamiast isset(), ponieważ isset() powróci false jeśli zmienna jest null, natomiast array_key_exists() tylko sprawdza czy klucz istnieje w tablicy:

function check($array, $key) 
{ 
    if(array_key_exists($key, $array)) { 
     if (is_null($array[$key])) { 
      echo $key . ' is null'; 
     } else { 
      echo $key . ' is set'; 
     } 
    } 
} 
+0

@pulzarraider dlaczego nie zastępujesz 'is_null()' z '==='? –

+0

Ponieważ jest szybszy – pulzarraider

+0

@pulzarraider - Jakiekolwiek dowody na poparcie tego roszczenia? Ponieważ [this post] (http://stackoverflow.com/questions/8228837/is -nullx-vs-x-null-in-php) i [ten post] (http://php.net/manual/en/function.is-null.php#84161) wydają się mocno nie zgadzać z tobą, oszczędzając nanosekundy w najlepszym razie, a twoja edycja jest zbędną mikro-optymalizacją. – nickb

0

Możesz przekazać go przez odniesienie:

function check(&$array, $key) 
{ 
    if (isset($array[$key])) { 
     if (is_null($array[$key])) { 
      echo $key . ' is null'; 
     } 
     echo $key . ' is set'; 
    } 
} 

check($a, 'a'); 
check($a, 'b'); 
check($a, 'c'); 

powinien dać braku powiadomienia

Ale isset powróci false na wartości null. Możesz spróbować array_key_exists zamiast

+1

Oryginalny kod również nie powiadamia. Przejście przez odniesienie jest niepotrzebne. – Barmar

+1

Niezła edycja ...;) – nickb

+0

@nickb, wysyłasz odpowiedź, gdy sprawdzałem, czy rzeczy, które pamiętam, były właściwe :) – RiaD

Powiązane problemy