2010-07-20 7 views
176

¿Cómo puedo unir dos matrices (una con cadenas => pares de valores y otra con int => pares de valores) manteniendo las cadenas/claves int? Ninguno de ellos se superpondrá (porque uno solo tiene cadenas y el otro solo números enteros).PHP: fusiona dos matrices mientras mantienes las teclas en lugar de reindexar?

Aquí está mi código actual (que no funciona, porque array_merge es re-indexación de la matriz con claves enteras):

// 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

Eso es raro: de acuerdo a la página PHP doc, array_merge * * no debe hacer eso. ¿Son las claves de cadena en realidad cadenas de representaciones de números enteros? – owenmarshall

+0

array_merge está reindexando mi segunda matriz. es decir. está cambiando la matriz de 'array (123 =>" VALUE123 ")' a 'array (0 =>" VALUE123 ")' – Garrett

+0

hmm, eso es interesante. Supongo que la documentación de PHP podría ser un poco confusa en ese punto. Dice lo que sucederá si * todas * las matrices tienen claves numéricas, pero no dice específicamente lo que sucederá si no lo hacen. –

Respuesta

419

Usted puede simplemente 'añadir' las matrices:

>> $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 de ninguna manera! sobrecarga del operador en php ftw! gracias =) – Garrett

+3

Funcionó como un encanto. –

+35

¡Ten MUY cuidado con esto! El operador + no es una adición, es una unión. Si las teclas no se superponen, todo está bien, pero si lo hacen ... – GordonM

39

Teniendo en cuenta que usted tiene

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

Haciendo salida $merge = $replacement + $replaced; voluntad:

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

La primera matriz de sum tendrá valores en la salida final.

Haciendo salida $merge = $replaced + $replacement; voluntad:

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

[[thumbsup]] en este –

+16

En resumen, al agregar 2 matrices, los valores de la primera anulan los valores de la segunda. – Dziamid

+0

Pensé que el segundo anulará el primero. :) –

Cuestiones relacionadas