+ opérateur pour tableau en PHP?
$test = array('hi');
$test += array('test','oh');
var_dump($test);
Que signifie +
pour array en PHP?
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 à
- PHP-src / Zend / zend_operators.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.
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!
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 .
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
)
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
)
- L'opération Array plus traite tous les tableaux comme un tableau assoc.
- 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;
}
$var1 = "example";
$var2 = "test";
$output = array_merge((array)$var1,(array)$var2);
print_r($output);
Tableau ([0] = > Exemple [1] = > test)