69 votes

Impossible de concaténer 2 tableaux en 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? Sauter 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?

145voto

awgy Points 3834

Les deux auront une clé de 0 , et cette méthode de combinaison des tableaux réduira les doublons. Essayez d'utiliser array_merge() 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

11voto

Christopher Altman Points 2371

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 afin que les valeurs de l'un soient ajoutées à la fin du précédent. Il retourne le tableau résultant.

8voto

alfasin Points 19063

Toutes les réponses précédentes sont incorrectes! merge fusionne les tableaux, ce qui signifie que si les tableaux ont un élément commun, l'une des copies sera omise. Même chose pour l' union .

Je n'ai pas trouvé de solution de contournement à 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);
?>
 

3voto

Rabbott Points 1753

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 se réindexe pas, alors il essaie de la sur-écrire.

2voto

Brant Points 1080
 $array = array('Item 1');

array_push($array,'Item 2');
 

ou

 $array[] = 'Item 2';
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X