2010-07-20 9 views
176

Come posso unire due array (uno con string => coppie di valori e un altro con int => coppie di valori) mantenendo le chiavi string/int? Nessuno di essi si sovrapporrà mai (perché uno ha solo stringhe e l'altro ha solo numeri interi).PHP: unire due array mantenendo le chiavi invece della reindicizzazione?

Ecco il mio codice attuale (che non funziona, perché array_merge è re-indicizzazione l'array con chiavi intere):

// get all id vars by combining the static and dynamic 
$staticIdentifications = array(
Users::userID => "USERID", 
Users::username => "USERNAME" 
); 
// get the dynamic vars, formatted: varID => varName 
$companyVarIdentifications = CompanyVars::getIdentificationVarsFriendly($_SESSION['companyID']); 
// merge the static and dynamic vars (*** BUT KEEP THE INT INDICES ***) 
$idVars = array_merge($staticIdentifications, $companyVarIdentifications); 
+1

Che strano: secondo la pagina doc PHP, array_merge * * non dovrebbe farlo. Le chiavi di stringa sono in realtà rappresentazioni stringa di interi? – owenmarshall

+0

array_merge sta reindicando il mio secondo array. ie. sta cambiando l'array da 'array (123 =>" VALUE123 ")' a 'array (0 =>" VALUE123 ")' – Garrett

+0

hmm, è interessante. Suppongo che la documentazione di PHP potrebbe essere un po 'poco chiara su questo punto. Dice cosa succederà se * tutti * gli array abbiano i tasti numerici, ma non specifichi specificamente cosa accadrà se non lo fanno. –

risposta

419

Si può semplicemente 'aggiungere' le matrici:

>> $a = array(1, 2, 3); 
array (
    0 => 1, 
    1 => 2, 
    2 => 3, 
) 
>> $b = array("a" => 1, "b" => 2, "c" => 3) 
array (
    'a' => 1, 
    'b' => 2, 
    'c' => 3, 
) 
>> $a + $b 
array (
    0 => 1, 
    1 => 2, 
    2 => 3, 
    'a' => 1, 
    'b' => 2, 
    'c' => 3, 
) 
+34

WOW no way! sovraccarico dell'operatore in php ftw! grazie =) – Garrett

+3

Ha funzionato come un fascino. –

+35

Sii MOLTO attento con questo! L'operatore + non è un'aggiunta, è un'unione. Se le chiavi non si sovrappongono, tutto va bene, ma se lo fanno ... – GordonM

39

Considerando che avete

$replaced = array('1' => 'value1', '4' => 'value4'); 
$replacement = array('4' => 'value2', '6' => 'value3'); 

Facendo uscita $merge = $replacement + $replaced; volontà:

Array('1' => 'value1', '4' => 'value2', '6' => 'value3'); 

Il primo array dalla somma avrà valori nell'output finale.

Facendo uscita $merge = $replaced + $replacement; volontà:

Array('1' => 'value1', '4' => 'value4', '6' => 'value3'); 
+0

[[thumbsup]] su questo –

+16

Per riassumere, quando si aggiungono 2 matrici, i valori dei primi valori di sovrascrittura dal secondo. – Dziamid

+0

Ho pensato che il secondo sostituirà il primo. :) –