web-dev-qa-db-fra.com

Impossible de concaténer 2 tableaux dans PHP

J'ai récemment appris à joindre deux tableaux à l'aide de l'opérateur + en PHP.

Mais considérons ce code ...

$array = array('Item 1');

$array += array('Item 2');

var_dump($array);

La sortie est

array (1) {[0] => string (6) "Item 1"}

Pourquoi ça ne marche pas? Ignorer le raccourci et utiliser $array = $array + array('Item 2') ne fonctionne pas non plus. Cela a-t-il quelque chose à voir avec les clés?

48
alex

Les deux auront une clé de 0 et cette méthode de combinaison des tableaux réduira les doublons. Essayez d'utiliser array_merge() à la place.

$arr1 = array('foo'); // Same as array(0 => 'foo')
$arr2 = array('bar'); // Same as array(0 => 'bar')

// Will contain array('foo', 'bar');
$combined = array_merge($arr1, $arr2);

Si les éléments de votre tableau utilisaient des clés différentes, l'opérateur + serait plus approprié.

$arr1 = array('one' => 'foo');
$arr2 = array('two' => 'bar');

// Will contain array('one' => 'foo', 'two' => 'bar');
$combined = $arr1 + $arr2;

Edit: Ajout d'un extrait de code pour clarifier 

104
awgy

Utilisez array_merge()
Voir la documentation ici:
http://php.net/manual/en/function.array-merge.php

Fusionne les éléments d’un ou de plusieurs tableaux de manière à ce que les valeurs de l’un soient ajoutées à la fin du précédent. Il retourne le tableau résultant.

8
Christopher Altman

Toutes les réponses précédentes sont incorrectes! fusion fusionne les tableaux, ce qui signifie que si les tableaux ont un élément commun, l'une des copies sera omise. Il en va de même pour union.

Je n'ai pas trouvé de solution pour ce problème, mais pour le faire manuellement ...

ça y est:

<?php
$part1 = array(1,2,3);
echo "array 1 = \n";
print_r($part1);
$part2 = array(4,5,6);
echo "array 2 = \n";
print_r($part2);
$ans = NULL;
for ($i = 0; $i < count($part1); $i++) {
    $ans[] = $part1[$i];
}
for ($i = 0; $i < count($part2); $i++) {
    $ans[] = $part2[$i];
}
echo "after arrays concatenation:\n";
print_r($ans);
?>
6
alfasin

+ est appelé l'opérateur Union, qui diffère de l'opérateur de concaténation (PHP n'en a pas pour les tableaux). La description dit clairement:

L'opérateur + ajoute des éléments des clés restantes du groupe droitier au groupe gaucher, tandis que les clés dupliquées ne sont PAS écrasées.

Avec l'exemple:

$a = array("a" => "Apple", "b" => "banana");
$b = array("a" => "pear", "b" => "strawberry", "c" => "cherry");
$c = $a + $b;

array(3) {
  ["a"]=>
  string(5) "Apple"
  ["b"]=>
  string(6) "banana"
  ["c"]=>
  string(6) "cherry"
}

Étant donné que les deux tableaux ont une entrée avec la clé 0, le résultat est attendu.

Pour concaténer, utilisez array_merge .

6
deceze

Essayez array_merge.

$array1 = array('Item 1');

$array2 = array('Item 2');

$array3 = array_merge($array1, $array2);

Je pense que c’est parce que vous n’affectez pas de clé à l’un ou l’autre, ils ont donc la clé 0, et le + ne réindexe pas.

3
Rabbott
$array = array('Item 1');

array_Push($array,'Item 2');

ou

$array[] = 'Item 2';
2
Brant Messenger

C'est en effet un conflit clé. Lors de la concaténation de tableaux, les clés dupliquées ne sont pas écrasées.

Au lieu de cela, vous devez utiliser array_merge()

$array = array_merge(array('Item 1'), array('Item 2'));
2