2012-06-06 17 views
48

Provengo da sfondo Python e il tipo di dati Python che è simile (un dizionario) è un insieme non ordinato di coppie di valori chiave.Sono ordinati array associativi PHP?

Mi chiedo se gli array associativi di PHP non siano ordinati? Sembrano essere ordinati.

$test = array(
    'test' => 'test', 
    'bar' => 'bar', 
); 

var_dump($test);  

var_dump(array_slice($test, 0, 1)); 

Il test viene sempre prima della barra e posso suddividere questo array come si vede. Quindi è sempre garantito l'ordine tra le versioni di php? L'ordine è l'ordine con cui ho dichiarato l'array? Quindi qualcosa sta indicando internamente 'test' per posizionare [0] nell'array? Ho letto http://php.net/manual/en/language.types.array.php ma non fa troppa luce su questo problema. Apprezzo le tue risposte. Ty

+6

Diverse di queste risposte si riferiscono al manuale PHP che indica che gli array sono ordinati. Ma questo non risponde affatto alla domanda originale. Quello che veniva chiesto era quale fosse l'ordine (predefinito) *** *** ***! L'ordine predefinito * appare * come l'ordine in cui gli elementi sono assegnati, ma dove dice la documentazione che possiamo contare su questa da una versione alla successiva? – flymike

risposta

46

array PHP associativi (così come matrici numeriche) ordinate, e PHP fornisce vari funzioni per affrontare la matrice di ordinazione chiave come ksort(), uksort() e krsort()

Inoltre, PHP permette di dichiarare array con tasti numerici su ordine:

$a = array(3 => 'three', 1 => 'one', 2 => 'two'); 
print_r($a); 

Array 
(
    [3] => three 
    [1] => one 
    [2] => two 
) 
// Sort into numeric order 
ksort($a); 
print_r($a); 
Array 
(
    [1] => one 
    [2] => two 
    [3] => three 
) 

From the documentation:

Una matrice in PHP è in realtà una mappa ordinata. Una mappa è un tipo che associa valori a chiavi. Questo tipo è ottimizzato per diversi usi; può essere trattato come una matrice, lista (vettore), tabella hash (un'implementazione di una mappa), dizionario, raccolta, stack, coda e probabilmente di più. Poiché i valori dell'array possono essere altri array, sono anche possibili alberi e array multidimensionali.

7

I documentation stati:

An array in PHP is actually an ordered map. 

Quindi sì, sono sempre ordinato. Gli array sono implementati come hash table.

+1

ovviamente ho letto la prima sentinella ma ero ancora confuso. Mi rendo conto che se ho $ test = array ('foo', 'bar') è ordinato $ test [0] è foo, $ test [1] è bar. Ma quando ho un array associativo le chiavi non sono ordinate numericamente. $ test ['test'] è ora al primo posto ma non è indicizzato numericamente, è indicizzato da una stringa, ecco perché sono stato confuso e pubblicato. – dm03514

+1

@ dm03514 Non sono sicuro di averti. Ma tutti gli array in PHP sono in realtà array associativi. Spero possa aiutare. – alexn

+1

questa risposta è corretta ma viene fuori come inutilmente condiscendente ... – mikegreiling

1

Dal php manual:

Arrays sono ordinate. L'ordine può essere modificato utilizzando varie funzioni di ordinamento. Vedere la sezione array functions per ulteriori informazioni.

Ho fatto affidamento sul fatto che sono ordinati e ha funzionato in modo coerente in ogni progetto che ho avuto.

Problemi correlati