2012-07-05 9 views
5

napisałem poniższy kod, aby sprawdzić, czy tablica jest łączne lub niePorównując tablicę kluczy asocjacyjnej do liczby całkowitej indeksowaną tablicę

function is_associative($arr) { 
    $arr = array_keys($arr); 
    return $arr != array_keys($arr); 
} 

zwraca prawdą dla tablic typu:

array("a" => 5,"b" => 9); 

i false dla tablic numerycznych

Ale nie zwraca prawdziwych dla tablic asocjacyjnych z pojedynczym elementem, takim jak:

array("a" =>9); 

Dlaczego zwraca wartość false w przypadku tablic asocjacyjnych z pojedynczym elementem?

+1

Powinieneś użyć 'array_diff' – alfasin

Odpowiedz

8

Trzeba użyć !== w porównaniu:

return $arr !== array_keys($arr); 

To generuje correct output obu z nich jest prawdziwa.

Inaczej typ żonglerka rozważy wartości dla pojedynczego elementu tablicy jako równy:

array(1) { [0]=> string(1) "a" } 
array(1) { [0]=> int(0) } 

Tutaj "a" == 0 jest prawdą (jak „a” jest cicho rzucić na 0), ale "a" === 0 jest fałszywe.

+0

tak, to był problem: dziękuję –

+0

Dlaczego nie są tego samego typu, gdy jest to tablica pojedynczego elementu? –

+1

@JinuJD - zaktualizowałem swoją odpowiedź, podając dokładniejszy opis tego, co się dzieje – nickb

Powiązane problemy