2010-12-27 11 views

risposta

21

Usa virgolette singole quando si fa riferimento il valore della chiave (in pratica lo trattano come un filo, questo è ciò che PHP è probabilmente facendo)

echo $array['3.3']; 
+2

Grazie fatto il trucco. Non so perché non ho pensato di provarlo :). – BandonRandon

+0

Indicazione "Lifesaver"! :) –

+2

una cosa: se il tuo '3.0' è per caso in una variabile (ie' $ x = '3.0'; ') e stai cercando di fare' $ myarr [$ x] = "Wow!" ' , dovrai fare qualcosa come '$ myarr [" '{$ x}' "] =" Wow! "'. Solo i miei 5 centesimi ... – hummingBird

2

Credo che abbia qualcosa todo con il PHP autocasting 3.3 => galleggiare

prova $ array [ '3.3']

13

Da manuale php:

Galleggianti a chiave sono troncati a numero intero.

Così si sta cercando di ottenere $ array [3], che non esiste, in modo da ottenere Null

+0

Per riferimento: https://bugs.php.net/bug.php? id = 32671 – RedGlobe

8

Una chiave può essere un numero intero o una stringa. Se una chiave è la rappresentazione standard di un intero, verrà interpretata come tale (ad esempio "8" verrà interpretato come 8, mentre "08" sarà interpretato come "08"). I float nella chiave vengono troncati all'intero. I tipi di array indicizzati e associativi sono dello stesso tipo in PHP, che può contenere sia indici interi sia stringhe.

Dal momento che un galleggiante sarebbe sempre ottenere troncato con un numero intero (ad esempio 3.3 sarebbe sempre essere interpretato dal array come 3) Mi chiedo se l'array è in attesa di una stringa, non un galleggiante . Hai provato $ array ["3.3"] invece di $ array [3.3]?

+2

"" 8 "verrà interpretato come 8."Vale la pena notare che su piattaforme in cui INT utilizza 32 bit, quando la stringa è nella rappresentazione standard di un numero intero che richiede più di 32 bit (ad esempio" 3206519370 "), allora rimarrà come chiave stringa e non verrà convertita a int (che risulterebbe in overflow). – JohnM2

0

galleggianti e stringa numerica a chiave vengono troncati a intero.

Così uscita di questo codice:

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

sarebbe:

Array 
(
    [1] => d 
) 
Problemi correlati