$array1 + $array2
retournera l'union des deux tableaux. Si elles sont associatives, les valeurs de l'opérande de gauche seront préférées si les clés entrent en collision. Par conséquent, ce n'est pas la solution que vous voulez car les valeurs seront perdues.
Il n'y a rien de mal à l'instruction à condition que les deux variables soient comprises comme des tableaux. Votre erreur fatale est probablement survenue car une variable était en fait un objet, et il est possible de le confondre avec var_dump. En ajoutant le type cast, vous avez forcé PHP à contraindre les deux variables à des tableaux. Si une variable est un objet, il aurait cet effet:
De l'PHP.net Manual
« Si un objet est converti en un tableau, le résultat est un tableau dont les éléments sont les propriétés de l'objet. les touches sont les noms de variables membres, avec quelques exceptions notables: les propriétés entières sont unaccessible; privés variables ont le nom de classe préfixé au nom de la variable; les variables protégées ont un « * » ajouté au nom de la variable. Ces valeurs préfixées ont des octets nuls sur de chaque côté."
Maintenant, avec deux tableaux à ajouter, PHP n'a rien à paniquer. Notez que tout en jetant les deux opérandes de +
était important, il n'a pas de sens pour lancer la variable que vous assignez à. L'expression (array)$foo
ne fonctionne pas modifier $ foo, mais retourne plutôt une nouvelle valeur Cela peut ne pas être intuitif dans les langages qui nécessitent la déclaration de variables, mais PHP n'est pas un tel langage
Sur votre autre problème, vous ne pouvez pas avoir deux clés identiques Cela rendrait impossible d'indexer le tableau car la valeur à retourner deviendrait ambiguë Si vous souhaitez combiner deux tableaux dans un manoir sans perte, vous devrez utiliser un structure ata.
Ma suggestion est d'utiliser un tableau de tableaux, où:
$a1 = array('a' => 1, 'b' => 2, 'c' => 3);
$a2 = array('a' => 3, 'b' => 2, 'd' => 2);
deuiendront:
$a3 = array(
'a' => array(1, 3),
'b' => array(2, 2),
'c' => array(3),
'd' => array(2)
);
Et l'ordre n'est pas déterminé. Le seul changement notable dans la structure est que toutes les premières valeurs sont des tableaux, ce qui permet d'accumuler des valeurs de clés dupliquées. Cette fonction fait la tâche et pourrait faire avec un meilleur nom:
// array(array) lossless_array_merge([$array1 [, $array2 [, $...]]])
function lossless_array_merge() {
$arrays = func_get_args();
$data = array();
foreach ($arrays as $a) {
foreach ($a as $k => $v) {
$data[$k][] = $v;
}
}
return $data;
}
Voir cette question connexe http://stackoverflow.com/questions/2140090/operator-for-array-in-php/2140094#2140094 – Gordon
Vous sont totalement à droite d'utiliser '+', il va union deux tableaux: * "L'opérateur + ajoute des éléments des clés restantes du tableau droitier à la main gauche, tandis que les clés dupliquées sont ** NON ** écrasées." * http: //www.php.net/manual/fr/language.operators.array.php Pourquoi faut-il les lancer en tableau avant de ne pas savoir que vous avez peut-être un code bizarre;) –
pouvez-vous ajouter la sortie de 'var_dump s'il vous plaît. raccourcissez-les quand ils sont très longs. – Gordon