2013-07-20 15 views
12

Come verificare se variabile arrayControllare se il valore gamma isset ed è nullo

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

è impostato ed è nullo.

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

E 'possibile in PHP di avere la funzione che controllerà se $ a [ 'c'] è nullo e se $ a [ 'b'] esiste senza "PHP Avviso: ..." errori?

+1

non ottengo alcun avvisi di avviso con il tuo codice. – Barmar

risposta

31

Uso array_key_exists() invece di isset(), perché isset() sarà tornare false se la variabile è null, mentre array_key_exists() controlla solo se la chiave esiste nella matrice:

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 perché ha fatto sostituisci 'is_null()' con '==='? –

+0

Perché è più veloce – pulzarraider

+0

@pulzarraider - Qualsiasi prova per eseguire il backup di tale affermazione? Perché [questo post] (http://stackoverflow.com/questions/8228837/is -nullx-vs-x-null-in-php) e [questo post] (http://php.net/manual/en/function.is-null.php#84161) sembra fortemente in disaccordo con te, risparmiando nanosecondi nella migliore delle ipotesi e rendendo la tua modifica una micro-ottimizzazione superflua. – nickb

0

Si può passare per riferimento:

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

dovrebbe dare alcun avviso

Ma isset torneranno false su valori nulli. Puoi provare array_key_exists invece

+1

Anche il codice originale non fornisce un avviso. Il passaggio per riferimento non è necessario. – Barmar

+1

Nice edit ...;) – nickb

+0

@nickb, hai postato la risposta mentre stavo controllando se le cose che ricordo erano corrette :) – RiaD