¿Cómo puedo fusionar dos matrices (una con string => pares de valores y otra con int => pares de valores) mientras mantengo las teclas string / 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á reindexando la matriz con teclas 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);
php
arrays
array-merge
Garrett
fuente
fuente
array( 123 => "VALUE123" )
aarray( 0 => "VALUE123" )
assert(array(0=>0,1=>1) === array_merge(array('9'=>0), array('9'=>1)))
Respuestas:
Simplemente puede 'agregar' las matrices:
fuente
print_r([2 => 56] + [2 => 30]);
rindeArray ( [2] => 56 )
. Entonces, mantiene el lado izquierdo como se especifica. Esto es a partir de PHP 7.1.19, que se ejecuta en repl.it .Teniendo en cuenta que tienes
Haciendo
$merge = $replacement + $replaced;
saldrá:La primera matriz de suma tendrá valores en la salida final.
Haciendo
$merge = $replaced + $replacement;
saldrá:fuente
$allValues += $newValues;
.$merge = $replacement + $replaced;
salir:Array ( [4] => value2 [6] => value3 [1] => value1 )
Si bien esta pregunta es bastante antigua, solo quiero agregar otra posibilidad de hacer una fusión mientras mantengo las claves.
Además de agregar claves / valores a las matrices existentes utilizando el
+
signo, puede hacer unarray_replace
.El resultado será:
La misma matriz sobrescribirá las mismas claves.
También hay un
array_replace_recursive
, que hace esto también para las submatrices.Ejemplo en vivo en 3v4l.org
fuente
Se pueden agregar o unir fácilmente dos matrices sin cambiar su indexación original por el operador + . Esto será de gran ayuda en el menú desplegable de selección de laravel y codeigniter.
La salida será:
fuente
Pruebe las funciones array_replace_recursive o array_replace
http://php.net/manual/en/function.array-replace-recursive.php
fuente