41 votes

PHP: Ajout de tableaux ensemble

Quelqu'un pourrait-il m'aider à expliquer cela? J'ai deux extraits de code, l'un fonctionne comme je m'y attends, mais l'autre ne fonctionne pas.

Cela fonctionne

Cela ne fait pas

Qu'est-ce qui se passe ici?? Pourquoi la deuxième version n'ajoute-t-elle pas les deux tableaux ensemble ? Qu'est-ce que j'ai mal compris ? Que dois-je faire à la place? Ou est-ce un bug dans PHP?

29voto

jdcantrell Points 941

Ceci est documenté et correct: http://us3.php.net/manual/en/language.operators.array.php

L'opérateur de l'opérateur annexe des éléments des touches restantes du tableau droit à la main gauche, tandis que les touches dupliquées ne sont PAS écrasées.

Donc, je suppose que ce n'est pas un bug dans php et ce qui est supposé arriver. Je n'avais pas remarqué ça avant non plus.

23voto

acm Points 2854

pour être bref, cela fonctionne parce que si vous print_r à la fois $a et $b, vous avez:

Array
(
    [a] => 1
    [b] => 2
)

et

Array
(
    [c] => 3
)

comme vous pouvez le voir, tous les éléments ont des touches différentes...

comme pour le deuxième exemple, les tableaux, si vous imprimez $a et $b, vous avez:

Array
(
    [0] => a
    [1] => b
)

et

Array
(
    [0] => c
)

et que la touche 0 pour les deux 'a' et 'c' est le problème ici, les éléments de la deuxième tableau avec les mêmes clés sont mis au rebut... si vous ne:

$c = $b + $a; // instead of $c = $a + $b;

le résultat sera:

Array
(
    [0] => c
    [1] => b
)

21voto

Andrew Hare Points 159332

Pour ajouter deux tableaux associatifs, vous devez utiliser l' array_merge fonction de:

Fusionne les éléments d'un ou de plusieurs tableaux de sorte que les valeurs de un sont ajoutées à la fin de la précédente. Il renvoie la qui en résulte tableau.

Si l'entrée tableaux ont la même clés de chaîne, puis plus tard de la valeur pour cette touche efface le précédent un. Si, toutefois, les tableaux contiennent touches numériques, la valeur ne sera pas plus tard remplacer la valeur d'origine, mais être joints en annexe.

Si un seul tableau est donné et l' tableau est indexé numériquement, les touches obtenir réindexée de façon continue.

1voto

Slokun Points 2861

Je pense que c'est juste un comportement sans papiers, mais je me trompe probablement à ce sujet. Quoi qu'il en soit, si vous essayez de mettre des tableaux ensemble comme ça, utilisez``

Voir : http://ca2.php.net/manual/en/function.array-merge.php

1voto

Matteo Riva Points 14340

Lorsque vous travaillez sur des tableaux, l'opérateur plus ne surécrive pas les index, ni ne réindexe les tableaux. Dans votre exemple a index 0 tout comme , il est donc jeté. Utilisez array_merge.

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