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.
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'');