2013-07-20 22 views
12

Wie überprüfen, ob Array-VariableÜberprüfen Sie, ob Array-Wert isset und ist null

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

gesetzt und ist 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'); 

Ist es möglich, in PHP-Funktion zu haben, die, wenn $ überprüfen a [ 'c'] null ist und wenn $ a [ 'b'] ohne exist "PHP Hinweis: ..." Fehler?

+1

bekomme ich nicht bemerken Warnungen mit Ihrem Code. – Barmar

Antwort

31

Verwenden array_key_exists() statt isset(), weil isset()false zurück, wenn die Variable null ist, während array_key_exists() prüft nur, wenn der Schlüssel in einem Array existiert:

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 warum Sie ersetzen 'is_null()' mit '==='? –

+0

Weil es schneller ist. – pulzarraider

+0

@pulzarraider - Belege, die diesen Anspruch unterstützen? Weil [dieser Beitrag] (http://stackoverflow.com/questions/8228837/is -nullx-vs-x-null-in-php) und [dieser Beitrag] (http://php.net/manual/en/function.is-null.php#84161) scheint dir sehr zu widersprechen, spart Nanosekunden bestenfalls und machen Ihre Bearbeitung zu einer überflüssigen Mikro-Optimierung – nickb

0

Sie können es durch einen Verweis:

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'); 

, hinfort Hinweis

Aber isset geben false auf NULL-Werte zurück. Sie können versuchen, array_key_exists statt

+1

Der ursprüngliche Code gibt auch keinen Hinweis. Die Weitergabe per Referenz ist unnötig. – Barmar

+1

Nice edit ...;) – nickb

+0

@nickb, du postest Antwort, während ich überprüft habe, ob Dinge, die ich erinnere, richtig waren :) – RiaD

Verwandte Themen