2010-12-20 11 views
5

jeden z moich szkół zdają się mieć „niezdefiniowanej indeksu” błąd w kodzie napisałem

Kod ten mój wygląda tak:

if (is_array ($arr['key'])) 

Moim zamiarem było sprawdzenie, czy $ arr ma klucz o nazwie "klucz", a jeśli wartością tego klucza jest sama tablica. Czy powinienem zamiast tego: if(isset($arr['key']) && is_array ($arr['key']))?

Możliwe jest następujące równanie: Załóżmy, że $ var nie jest ustawione. Czy zmienna is_array ($ var) spowoduje błąd, czy po prostu zwróci false?

Dziękuję

Odpowiedz

6

Tak, użyj isset, następnie is_array.

if(isset($arr['key']) && is_array($arr['key'])) { 
    // ... 
} 

Ponieważ PHP używa zwarciem ocenę logiki, zatrzyma zanim dotrze do is_array(), więc nigdy nie pojawia się błąd.

2

Spróbuj:

is_array($arr) && array_key_exists('key', $arr) 
+0

To nie jest odpowiedź na moje pytanie, ale nie było wystarczająco jasne. Zmieniono to, proszę dać inny wygląd – shealtiel

+0

Jeśli jest ** nie ** ustawiony, to rzuci zawiadomienie. Możesz najpierw sprawdzić 'isset ($ arr) && is_array ($ arr)'. – ncuesta

0

sprawdzić, czy istnieje, potem jeśli jego tablicą. W przeciwnym razie nadal otrzymasz ten sam błąd.

if (isset($arr['key'])) { 
    if (is_array ($arr['key']) { 

    } 
} 
+2

Dlaczego nie obie w tej samej instrukcji: if (isset ($ arr ['key']) && is_array ($ arr ['key'])? – shealtiel

0

Może rozważyć funkcję rodzajowy get() dla bezpiecznych, pobierania danych z tablic:

/* 
    Get with safety 
    @author: boctulus 

    @param array 
    @param index1 
    @param index2 
    .. 
*/ 
function get(){ 
    $numargs = func_num_args(); 
    $arg_list = func_get_args(); 

    $v = $arg_list[0]; 

    for ($i = 1; $i < $numargs; $i++) 
    { 
      if (isset($v[$arg_list[$i]])) 
      $v = $v[$arg_list[$i]]; 
     else 
      return null; 
    } 

    return $v; 
} 

Zastosowanie:

$arr = []; 

var_dump(get($arr,'a','b')); // NULL 

$arr['a']['b'] = 'ab'; 
var_dump(get($arr,'a','b')); // 'ab' 
Powiązane problemy