values unir relacionar objetos mezclar combine array_combine array php arrays array-merge

php - relacionar - unir dos foreach



PHP: ¿fusionar dos matrices manteniendo claves en lugar de reindexar? (4)

Dos matrices se pueden agregar o unir fácilmente sin cambiar su indexación original por el operador + . Esto será de gran ayuda en la lista desplegable de selección de códigos y autorizaciones.

$empty_option = array( ''''=>''Select Option'' ); $option_list = array( 1=>''Red'', 2=>''White'', 3=>''Green'', ); $arr_option = $empty_option + $option_list;

La salida será:

$arr_option = array( ''''=>''Select Option'' 1=>''Red'', 2=>''White'', 3=>''Green'', );

¿Cómo puedo fusionar dos matrices (una con pares cadena => valor y otra con pares int => valor) mientras mantengo las claves cadena / int? Ninguno de ellos se superpondrá (porque uno solo tiene cadenas y el otro solo tiene números enteros).

Aquí está mi código actual (que no funciona, porque array_merge está re-indexando 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);


Si bien esta pregunta es bastante antigua, solo quiero agregar otra posibilidad de hacer una combinación manteniendo las claves.

Además de agregar claves / valores a las matrices existentes con el signo + , podría hacer un array_replace .

$a = array(''foo'' => ''bar'', ''some'' => ''string''); $b = array(42 => ''answer to the life and everything'', 1337 => ''leet''); $merged = array_replace($a, $b);

Las mismas claves serán sobrescritas por la última matriz.
También hay un array_replace_recursive , que hace esto también para subarrays.

Ejemplo vivo en 3v4l.org


Simplemente puede ''agregar'' 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, )


Teniendo en cuenta que tienes

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

Haciendo $merge = $replacement + $replaced; es la salida:

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

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

Haciendo $merge = $replaced + $replacement; es la salida:

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