+ opérateur pour tableau en PHP?

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

Que signifie + pour array en PHP?

168
demandé sur user198729 2010-01-26 17:46:17

8 réponses

Citant le manuel PHP sur les opérateurs de langage

L'opérateur + renvoie le tableau de droite ajouté au tableau de gauche; pour les clés qui existent dans les deux tableaux, les éléments du tableau de gauche seront utilisés, et les éléments correspondants du tableau de droite seront ignorés.

Donc si vous le faites

$array1 = ['one',   'two',          'foo' => 'bar'];
$array2 = ['three', 'four', 'five', 'foo' => 'baz']; 

print_r($array1 + $array2);

Vous obtiendrez

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)
)

Donc la logique de + est équivalente à l'extrait suivant:

$union = $array1;

foreach ($array2 as $key => $value) {
    if (false === array_key_exists($key, $union)) {
        $union[$key] = $value;
    }
}

Si vous êtes intéressé par les détails de la tête de mise en œuvre de niveau C à


Notez que + est différent de comment array_merge() combinerait les tableaux:

print_r(array_merge($array1, $array2));

Vous donnerait

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
)

Voir pages liées pour plus d'exemples.

234
répondu Gordon 2017-08-31 12:10:24

Le meilleur exemple que j'ai trouvé pour l'utiliser est dans un tableau de configuration.

$user_vars = array("username"=>"John Doe");
$default_vars = array("username"=>"Unknown", "email"=>"no-reply@domain.com");

$config = $user_vars + $default_vars;

Le $default_vars, comme il le suggère, est le tableau des valeurs par défaut. Le tableau $user_vars écrasera les valeurs définies dans $default_vars. Toutes les valeurs manquantes dans $user_vars sont maintenant les valeurs par défaut de $default_vars.

Ce serait print_r comme:

Array(2){
    "username" => "John Doe",
    "email" => "no-reply@domain.com"
}

J'espère que cela aide!

14
répondu Frank de Jonge 2015-10-06 13:58:03

Cet opérateur prend l'union de deux tableaux (identique à array_merge, sauf qu'avec array_merge les clés dupliquées sont écrasées).

La documentation pour les opérateurs de tableau se trouve ici .

6
répondu Peter Smit 2010-01-26 16:59:21

Attention avec les touches numériques, si elles doivent être conservées ou si vous ne voulez rien perdre

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

Union

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

Fusionner

print_r(array_merge($a, $b));
Array
(
    [0] => a2
    [1] => a4
    [2] => a5
    [3] => b1
    [4] => b3
    [5] => b4
)
5
répondu dcaillibaud 2013-05-31 06:20:37

Le + opérateur produit les mêmes résultats que array_replace(). Cependant, puisque les arguments de l'opérateur sont inversés, l'ordre du tableau résultant peut également être différent.

Développer un autre exemple de cette page:

$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

Sorties:

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
)
3
répondu Tamlyn 2014-01-30 13:33:45
  1. L'opération Array plus traite tous les tableaux comme un tableau assoc.
  2. en cas de conflit de clé pendant plus, la valeur gauche (précédente) sera conservée

Je poste le code ci-dessous pour clarifier les choses.

$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;
}
0
répondu Gucci Koo 2014-12-31 16:31:18

Il ajoutera le nouveau tableau au précédent.

-2
répondu SorcyCat 2010-01-26 14:48:05
$var1 = "example";
$var2 = "test";
$output = array_merge((array)$var1,(array)$var2);
print_r($output);

Tableau ([0] = > Exemple [1] = > test)

-4
répondu Henning 2011-12-03 16:42:37