2009-06-04 11 views
8

Quando eseguo un ciclo foreach su un array associatve in php, l'ordine in cui viene eseguito è l'ordine in cui è definito.L'ordine di un array associativo è garantito in PHP?

Ad esempio:

$arr = array("z" => "z", "a" => "a", "b" => "b"); 

foreach($arr as $key => val) 
    print("$key: $val\n"); 

Uscite:

z: z 
a: a 
b: b 

considerando

$arr = array("a" => "a", "b" => "b", "z" => "z"); 

Uscite:

a: a 
b: b 
z: z 

Quindi la mia domanda è: questo comportamento è definito a livello di specifica? Posso avere la ragionevole certezza che questo comportamento non verrà modificato nelle versioni future di PHP?

risposta

16

Dal PHP Manual

Un array in PHP è in realtà un ordinata mappa. Una mappa è un tipo che associa i valori alle chiavi. Questo tipo è ottimizzato per diversi usi; può essere trattato come una matrice, lista (vettore), tabella hash (un'implementazione di una mappa ), dizionario, raccolta, pila, coda e probabilmente di più.

e

Gli array sono ordinate. L'ordine può essere modificato utilizzando varie funzioni di ordinamento .

Così puoi essere certo (almeno al momento) che l'ordine verrà mantenuto. Sarei molto sorpreso se questo comportamento dovesse cambiare perché è chiaramente dichiarato e per questo ci sarà un'enorme quantità di codice che si basa su di esso.

+0

+1 Una citazione vale più di mille parole. ;) – Gumbo

+0

Grazie! Per qualche ragione, ho riflettuto su questo - probabilmente quando stavo ancora pensando che non si applicava agli array associativi. – Asuah

0

Questo non cambierà mai.

+1

Queste non sono le modifiche che stai cercando. * fa un'onda della mano Jedi * –

0

Poiché gli array sono sempre ordinati e il modo più semplice e veloce per iterare l'array passa dal primo elemento all'ultimo (quindi non vi è alcun motivo valido per modificare il comportamento di foreach()), è possibile essere ragionevolmente sicuro che questo comportamento non cambierà.

0

Le tue domande sembrano uscite dalla programmazione in Perl dove non è garantito che gli "array" siano nell'ordine in cui li hai creati. Ma in PHP è sempre stato ordinato e lo sarà sempre, altrimenti si romperà molto codice.

Problemi correlati