2010-12-27 13 views
8

Otrzymuję dane z tablicy. Z jakiegoś powodu tablica ma kluczowe wartości, takie jak [3.3], z której nie mogę pobrać danych.Praca z tablicą z kropkami w kluczowych wartościach

Mam tę tablicę [3.3] => First Name [3.6] => Last Name[2] => [email protected].

Kiedy próbuję zadzwonić pod numer $array[3.3], zwróci ona wartość null, ale gdy zadzwonię pod numer $array[2], otrzymam wiadomość e-mail. Jakieś pomysły?

Odpowiedz

21

apostrofów po przedstawieniu wartość klucza (w zasadzie traktować go jak struna, to co PHP jest prawdopodobnie robi)

echo $array['3.3']; 
+2

Dzięki załatwiło sprawę. Nie wiem, dlaczego nie chciałem tego spróbować :). – BandonRandon

+0

Wskazanie "ratownik"! :) –

+2

jedno: jeśli twoje "3.0" jest przypadkiem w zmiennej (tj. '$ X = '3.0';') i próbujesz zrobić '$ myarr [$ x] =" Wow! " , musisz zrobić coś w stylu '$ myarr [" '{$ x}' "] =" Wow! "'. Tylko moje 5 centów ... – hummingBird

2

Myślę, że to ma coś todo z PHP autocasting 3.3 => unosić

try $ array [ '3,3']

13

Z podręcznika pHP:

pływa w kluczu są obcięte do liczby całkowitej.

więc starasz się dostać $ tablica [3], która nie istnieje, więc masz Null

+0

Dla odniesienia: https://bugs.php.net/bug.php? id = 32671 – RedGlobe

8

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"). Klawisz float jest obcięty do liczby całkowitej. Indeksowane i asocjacyjne typy tablic są tego samego typu w PHP, które mogą zawierać zarówno liczby całkowite, jak i łańcuchowe.

Ponieważ pływak zawsze obcinane jako liczba całkowita (np 3.3 zawsze być interpretowane przez tablicy jako 3) Zastanawiam się, czy tablica spodziewa się ciąg nie pływak . Czy wypróbowałeś $ tablica ["3.3"] zamiast $ array [3.3]?

+2

"" 8 "będzie interpretowane jako 8."Warto zauważyć, że na platformach, gdzie INT używa 32 bitów, gdy string jest w standardowej reprezentacji liczby całkowitej, która potrzebuje więcej niż 32 bitów (na przykład" 3206519370 "), to pozostanie jako klucz ciągowy i nie zostanie przekonwertowany do int (co spowodowałoby przepełnienie). – JohnM2

0

pływaków i ciąg liczbowy w kluczu są obcinane do całkowitej.

Tak Wyjście ten kod:

$array = [1 => "a", "1" => "b", 1.5 => "c", true => "d"]; 
print_r($array); 

byłoby:

Array 
(
    [1] => d 
)