Fusionar dos matrices con el "+" (operador de unión de matrices) ¿Cómo funciona?

Resuelto user198729 asked hace 54 años • 9 respuestas

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?

user198729 avatar Jan 01 '70 08:01 user198729
Aceptado

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.

Gordon avatar Jan 26 '2010 14:01 Gordon

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_varsmatriz sobrescribirá los valores definidos en $default_vars. Cualquier valor que falte $user_varsahora son las variables predeterminadas de $default_vars.

Esto sería print_rcomo:

Array(2){
    "username" => "John Doe",
    "email" => "[email protected]"
}

¡Espero que esto ayude!

Frank de Jonge avatar Nov 16 '2010 13:11 Frank de Jonge