2015-06-04 10 views
7

Come noto, in associative arrays, se le chiavi non sono impostate, verranno impostate automaticamente. Ma sembra non ha senso in questo caso:Come fa PHP ad associare gli array associativi?

$a = array('1' => 'One', '3', '2' => 'Two'); 
print_r($a); 

Uscite:

Array ([1] => One [2] => Two) 

Allora, dove è il '3'?

+0

dove hai preso questo? Array associativo utilizzato semplicemente per impostare la propria chiave rispetto ai tasti predefiniti –

+0

Ottengo questo da [collegamento] (http://php.net/manual/en/function.array.php). Dice: "Quando l'indice viene omesso, viene generato automaticamente un indice intero, a partire da 0. Se indice è un numero intero, l'indice generato successivo sarà l'indice intero più grande + 1". – Jane

+0

usa gentilmente questo codice e controllalo '$ a = array ('1' => 'One', '3', '3' => 'Two'); print_r ($ a); ' –

risposta

4

Da tuo definita dall'utente matrice si stanno assegnando le chiavi manualmente l'array mezzi come

array(1 => 'One',3, 2 => 'Two');//[1] => One [2] => 3 [2] => Two 

Qui abbiamo due indici identici e secondo DOCS sua ricordato che la ultimo sovrascrive la prima

Sintassi "indice => valori", separati da virgole, definire indice e valori. indice può essere di tipo stringa o intero. Quando l'indice viene omesso, un indice intero viene generato automaticamente, a partire da 0. Se indice è un numero intero, l'indice generato successivo sarà l'indice intero più grande + 1.

Si noti che quando vengono definiti due indici identici, l'ultimo sovrascrivere il primo.

Al fine di filtrare questo caso si può semplicemente fare alcuni cambiamenti come

array(1 => 'One',2 =>'Two',3) // array ([1] => One [2] => Two [3] => 3) 
array(3,1 => 'One',2 =>'Two') //array ([0] => 3 [1] => One [2] => Two) 
array(1 => 'One',2 => 3 ,3 =>'Two')// array([1] => One [2] => 3 [3] => Two) 

DOCS CHECK PARAMETERS

+0

Sei il benvenuto ....Controlla la mia risposta aggiornata @Jane –

+0

Ehi @Uchiha, un'altra domanda. Come rimuovere i valori che non hanno le chiavi associate come sopra prima di elaborare l'array? – Jane

+0

Siamo spiacenti, non posso farcela, per favore, mostra la tua uscita prevista. –

3

in PHP La chiave è opzionale. Se non è specificato, PHP userà l'incremento della grande intero precedentemente utilizzato chiave

Come se: -

$a = array(1 => 'One', 3, 3 => 'Two'); 
var_dump($a); 

uscita: -

array(3) { 
    [1]=> 
    string(3) "One" 
    [2]=> 
    int(3) 
    [3]=> 
    string(3) "Two" 
} 

Qui per secondo valore uno è incremento dal valore precedente ovvero 2.

Ora

dire array è: -

$a = array('1' => 'One', '3', '3' => 'Two'); 
var_dump($a); 

uscita sarà

array(3) { 
    [1]=> 
    string(3) "One" 
    [2]=> 
    string(1) "3" 
    [3]=> 
    string(3) "Two" 
} 

qui anche qui per secondo valore è incremento dal valore precedente cioè 2.

Ora terzo caso: -

Se array è: -

$a = array('1' => 'One', '1' => 'two' , '1' => 'Three'); 
var_dump($a); 

uscita sarà: -

array(1) { 
    [1]=> 
    string(5) "Three" 
} 

Questo perché array associativo mantenere valore come mappa e se la chiave è presente sovrascrive il valore in questo caso 1 è sovrascritto 2 volta come risultato tre

In y il nostro caso: -

$a = array('1' => 'One', '3', '2' => 'Two'); 
print_r($a); 

uscita è

Array 
(
    [1] => One 
    [2] => Two 
) 

Questo perché: -

prima mappa chiave sarà: - '1' => 'one'

nuovo

php manterrà secondo valore come '2' => '3'

Oggi come matrice '2' è assegnato come 'Due', valore diventano

'2' => 'Two' che significa che sovrascrive.

+0

Oh capisco! Grazie! – Jane

0

@Uchiha è giusto, proprio come un include a quella risposta, se si vuole evitare questo problema, mantenere i membri di un array (che non stanno avendo chiavi specificate) all'ultimo


$a = array('1' => 'One', '3', '2' => 'Two'); 

sarà il dump

array (size=2) 
    1 => string 'One' (length=3) 
    2 => string 'Two' (length=3) 


e mantenere i membri con le chiavi non definiti finalmente

$a = array('1' => 'One', '2' => 'Two', '3'); 

scaricherà

array (size=3) 
    1 => string 'One' (length=3) 
    2 => string 'Two' (length=3) 
    3 => string '3' (length=1) 


eviterà problemi che si trovano ad affrontare.