2011-01-09 17 views
7

Mam prostą tablicę asocjacyjną.Macierze asocjacyjne PHP - jak traktować liczbę całkowitą jako ciąg

$a = array("a"=>"b", "c"=>"d"); 

Chcę sprawdzić, czy w tablicy istnieje klucz "1", np.

isset($a["1"]); 

Ciąg ten jest traktowany jako liczba całkowita, tak że

echo $a["1"]; //prints "d" 

Jak mogę to traktować jako ciąg?

Nie chcę używać array_key_exists lub in_array, ponieważ mój benchmarking pokazuje isset będzie o wiele szybszy.

+3

.. prosta odpowiedź brzmi: nie używaj liczb całkowitych do twoich powiązanych tablic. Dodaj prefiks lub całkowicie zmień konwencję nazewnictwa. Po co tworzyć obejście, aby uwzględnić ten możliwy do uniknięcia wybór projektu? – Fosco

+0

Parsuję słowa z tekstu i sprawdzam ich indeks, niektóre z nich będą liczbami, więc muszę to zrobić w ten sposób. – bcoughlan

+2

-1 Fałszywe pytanie, php nie zachowuje się w ten sposób. – goat

Odpowiedz

6

Wygląda na to, że nie możesz zrobić tego, co chcesz. od http://us.php.net/manual/en/language.types.array.php:

Klucz może być liczbą całkowitą lub łańcuchem. Jeśli klucz jest standardową reprezentacją liczby całkowitej, będzie interpretowany jako taki (tj. "8" będzie interpretowane jako 8, a "08" będzie interpretowane jako "08").

Najprawdopodobniej będziesz musiał użyć sugestii Fosco, aby przypisać wszystkie klucze. Jeśli użyjesz tego samego prefiksu na każdym kluczu, to nie ma znaczenia, czy analizujesz tekst, który może zawierać słowa i liczby - bez względu na wszystko wstaw ten sam prefiks.

0

isset ($ a ["1"]) | isset ($ a [1])?

Albo po prostu isset ($ a [1])

Albo nawet isset ($ a [intval (1)]) będzie 1000% pewny.

+0

W inny sposób, szukając łańcucha, a nie liczby całkowitej – bcoughlan

0

jeśli echo $ a ['1' drukuje d, to twoja tablica ma więcej elementów, niż sobie uświadamiasz.

zobacz funkcje var_dump ($ a) i print_r ($ a), które pomogą Ci w debugowaniu kodu.

Powiązane problemy