$array1 + $array2
devolverá la unión de las dos matrices. Si son asociativos, los valores del operando izquierdo serán preferidos si las teclas colisionan. Por lo tanto, esta no es la solución que desea ya que los valores se perderán.
No hay nada de malo en la declaración siempre que ambas variables se entiendan como matrices. Su error fatal probablemente ocurrió porque una variable era en realidad un objeto, y es posible confundir eso usando var_dump. Al agregar los moldes de tipo, forzó a PHP a forzar ambas variables a las matrices. Si una variable era un objeto, tendría este efecto:
Desde el PHP.net Manual
"Si un objeto se convierte en una matriz, el resultado es una matriz cuyos elementos son las propiedades del objeto. las claves son los nombres de las variables miembro, y pocas excepciones notables: enteros propiedades son inaccesibles; variables privadas tienen el nombre de la clase antes del nombre de la variable; las variables protegidas tienen un '*' antepuesto al nombre de la variable. Estos valores anexados tienen bytes nulos en en ambos lados."
Ahora que tiene dos matrices para agregar, PHP no tenía nada para entrar en pánico. Tenga en cuenta que mientras se lanzan los dos operandos de +
era importante, no tenía sentido convertir la variable que estaban asignando a. La expresión (array)$foo
no lo hace modifique $ foo, pero devuelve un nuevo valor. Esto puede no ser intuitivo desde los idiomas que requieren que declare las variables, pero PHP no es un idioma.
En su otro problema, no puede tener dos de la misma clave en una matriz. Esto haría que sea imposible indexar la matriz, ya que el valor correcto para volver se volvería ambiguo. Si desea combinar dos matrices en una mansión sin pérdidas, tendrá que usar una d más complicada. ata estructura.
Mi sugerencia es utilizar una matriz de matrices, donde:
$a1 = array('a' => 1, 'b' => 2, 'c' => 3);
$a2 = array('a' => 3, 'b' => 2, 'd' => 2);
se convertirá en:
$a3 = array(
'a' => array(1, 3),
'b' => array(2, 2),
'c' => array(3),
'd' => array(2)
);
Y el pedido no está determinada. El único cambio notable en la estructura es que todos los primeros valores son matrices, lo que permite acumular valores de claves duplicadas. Esta función hace la tarea y podría hacer con un nombre mejor:
// 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;
}
Ver esta pregunta relacionada http://stackoverflow.com/questions/2140090/operator-for-array-in-php/2140094#2140094 – Gordon
Usted son totalmente correctas para usar '+', unirá dos matrices: * "El operador + agrega elementos de las teclas restantes de la matriz de la mano derecha a la mano izquierda, mientras que las teclas duplicadas están ** NO ** sobrescritas." * http: //www.php.net/manual/en/language.operators.array.php ¿Por qué tienes que convertirlos en una matriz antes de no saber si tienes un código extraño?) –
puedes agregar la salida de 'var_dump 'por favor. acortarlos cuando son muy largos. – Gordon