arrays array - +operador para matriz en PHP?




ejemplos agregar (8)

$test = array('hi');
$test += array('test','oh');
var_dump($test);

¿Qué significa + para array en PHP?


Answers

Cuidado con las teclas numéricas, si deben conservarse o si no desea perder nada

$a = array(2 => "a2", 4 => "a4", 5 => "a5");
$b = array(1 => "b1", 3 => "b3", 4 => "b4");

Unión

print_r($a+$b);
Array
(
    [2] => a2
    [4] => a4
    [5] => a5
    [1] => b1
    [3] => b3
)

unir

print_r(array_merge($a, $b));
Array
(
    [0] => a2
    [1] => a4
    [2] => a5
    [3] => b1
    [4] => b3
    [5] => b4
)

Anexará la nueva matriz a la anterior.


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 matriz $user_vars sobrescribirá los valores definidos en $default_vars . Todos los valores perdidos en $user_vars ahora son los valores predeterminados de $default_vars .

Esto print_r como:

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

¡Espero que esto ayude!


El operador + produce los mismos resultados que array_replace() . Sin embargo, dado que los argumentos del operador están invertidos, el orden de la matriz resultante también puede ser diferente.

Expandiendo en otro ejemplo de esta página:

$array1 = array('one', 'two', 'foo' => 'bar');
$array2 = array('three', 'four', 'five', 'foo' => 'baz'); 

print_r($array1 + $array2);
print_r(array_replace($array2, $array1)); //note reversed argument order

productos:

Array
(
    [0] => one   // preserved from $array1
    [1] => two   // preserved from $array1
    [foo] => bar // preserved from $array1
    [2] => five  // added from $array2
)
Array
(
    [0] => one   // preserved from $array1
    [1] => two   // preserved from $array1
    [2] => five  // added from $array2
    [foo] => bar // preserved from $array1
)

Este operador toma la unión de dos matrices (igual que array_merge, excepto que con array_merge las claves duplicadas se sobrescriben).

La documentación para operadores de array se encuentra documentation .


  1. La operación Array plus trata a todas las matrices como una matriz assoc.
  2. Cuando se mantenga el conflicto clave durante el más, el valor izquierdo (anterior)

Publiqué el código a continuación para aclarar las cosas.

$a + $b = array_plus($a, $b)

function array_plus($a, $b){
    $results = array();
    foreach($a as $k=>$v) if(!isset($results[$k]))$results[$k] = $v;
    foreach($b as $k=>$v) if(!isset($results[$k]))$results[$k] = $v;
    return $results;
}

Citando del documentation

El operador + devuelve la matriz de la derecha anexa a la matriz de la izquierda; para las claves que existen en ambas matrices, se usarán los elementos de la matriz de la izquierda y se ignorarán los elementos coincidentes de la matriz de la derecha.

Entonces 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 del nivel C, diríjase a

Tenga en cuenta que ese + es diferente de cómo array_merge() combinaría 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
)

Vea las páginas enlazadas para más ejemplos.


Sé que la gente está buscando algún tipo de enfoque de javascript en bruto. Pero si quiere pensar menos, eche un vistazo aquí: http://underscorejs.org/#isArray

_.isArray(object) 

Devuelve true si el objeto es un Array.

(function(){ return _.isArray(arguments); })();
=> false
_.isArray([1,2,3]);
=> true




php arrays