Fusionar dos matrices con el "+" (operador de unión de matrices) ¿Cómo funciona?
Tengo un código que parece fusionar los datos de dos matrices usando +=
, pero no incluye todos los elementos del elemento. ¿Como funciona?
Ejemplo:
$test = array('hi');
$test += array('test', 'oh');
var_dump($test);
Producción:
array(2) {
[0]=>
string(2) "hi"
[1]=>
string(2) "oh"
}
¿ Qué +
significa cuando se usa en matrices en PHP?
Citando el Manual de PHP sobre operadores de lenguaje
El operador + devuelve la matriz de la derecha agregada a la matriz de la izquierda; para las claves que existen en ambas matrices, se utilizarán los elementos de la matriz de la izquierda y se ignorarán los elementos coincidentes de la matriz de la derecha.
Así que si lo haces
$array1 = ['one', 'two', 'foo' => 'bar'];
$array2 = ['three', 'four', 'five', 'foo' => 'baz'];
print_r($array1 + $array2);
Conseguirás
Array
(
[0] => one // preserved from $array1 (left-hand array)
[1] => two // preserved from $array1 (left-hand array)
[foo] => bar // preserved from $array1 (left-hand array)
[2] => five // added from $array2 (right-hand array)
)
Entonces la lógica de +
es equivalente al siguiente fragmento:
$union = $array1;
foreach ($array2 as $key => $value) {
if (false === array_key_exists($key, $union)) {
$union[$key] = $value;
}
}
Si está interesado en los detalles de la implementación de nivel C, diríjase a
- php-src/Zend/ zend_operators.c
Tenga en cuenta que eso +
es diferente de cómo array_merge()
se combinarían las matrices:
print_r(array_merge($array1, $array2));
te daría
Array
(
[0] => one // preserved from $array1
[1] => two // preserved from $array1
[foo] => baz // overwritten from $array2
[2] => three // appended from $array2
[3] => four // appended from $array2
[4] => five // appended from $array2
)
Consulte las páginas vinculadas para obtener más ejemplos.
El mejor ejemplo que encontré para usar esto está en una matriz de configuración.
$user_vars = array("username"=>"John Doe");
$default_vars = array("username"=>"Unknown", "email"=>"[email protected]");
$config = $user_vars + $default_vars;
El $default_vars
, como sugiere, es la matriz de valores predeterminados. La $user_vars
matriz sobrescribirá los valores definidos en $default_vars
. Cualquier valor que falte $user_vars
ahora son las variables predeterminadas de $default_vars
.
Esto sería print_r
como:
Array(2){
"username" => "John Doe",
"email" => "[email protected]"
}
¡Espero que esto ayude!