valores - php array merge multidimensional
PHP array_merge con teclas numéricas (8)
Bastante fácil de escribir manualmente:
function array_merge_custom($first, $second) {
$result = array();
foreach($first as $key => $value) {
$result[$key] = $value;
}
foreach($second as $key => $value) {
$result[$key] = $value;
}
return $result;
}
Actualización: Esto se comporta de manera diferente que el operador de la unión ( return $first + $second;
) porque en este caso la segunda matriz gana cuando ambos tienen elementos con la misma clave.
Sin embargo, si cambia los lugares de los argumentos y coloca la matriz que desea "ganar" en caso de conflictos como el primer operando, puede obtener el mismo comportamiento. Entonces la función anterior se comporta exactamente como return $second + $first;
.
¿Cómo se puede hacer para que array_merge () sobrescriba dos claves con diferentes valores pero el mismo índice de clave de dos matrices?
por ejemplo, fusión:
[0] => ''whatever''
con
[0] => ''whatever'', [1] => ''a'', [2] => ''b''
debería producir
[0] => ''whatever'', [1] => ''a'', [2] => ''b''
Básicamente, quiero que array_merge funcione de la misma manera que si las matrices tuvieran claves de cadena ...
Debe usar $a2+$a1
para obtener el mismo resultado con array_merge($a1,$a2);
$a1 = array(
''k1'' => 1,
''k2'' => 2,
''k3'' => 3,
);
$a2 = array(
''k1'' => 11,
''k2'' => 22,
''k4'' => 44,
);
Código:
print_r(array_merge($a1,$a2));
Salida:
Array (
[k1] => 11
[k2] => 22
[k3] => 3
[k4] => 44
)
Código:
print_r($a1+$a2);
Salida:
Array (
[k1] => 1
[k2] => 2
[k3] => 3
[k4] => 44
)
Código:
print_r($a2+$a1);
Salida:
Array (
[k1] => 11
[k2] => 22
[k4] => 44
[k3] => 3
)
Puede usar array_merge()
y luego usar array_unique()
.
Use el operador +
.
Compare el operador array_merge
to +
:
<?php
$a1 = array(0=>"whatever",);
$a2 = array(0=>"whatever",1=>"a",2=>"b");
print_r(array_merge($a1,$a2));
print_r($a1+$a2);
?>
Salida:
Array
(
[0] => whatever
[1] => whatever
[2] => a
[3] => b
)
Array
(
[0] => whatever
[1] => a
[2] => b
)
El operador +
todavía funciona si su matriz asociativa tiene las claves numéricas fuera de orden:
<?php
$a1 = array(0=>"whatever",);
$a2 = array(1=>"a",0=>"whatever",2=>"b");
print_r(array_merge($a1,$a2));
print_r($a1+$a2);
?>
Salida:
Array
(
[0] => whatever
[1] => a
[2] => whatever
[3] => b
)
Array
(
[0] => whatever
[1] => a
[2] => b
)
Observe que array_merge
en este caso crea una nueva clave. No deseable...
array_replace
hace exactamente esto. Ver: http://php.net/manual/de/function.array-replace.php
$arrA = [10, 11, 12];
$arrB = [12, 13];
$arrCommon = array_keys(array_flip($arrA) + array_flip($arrB));
print_r($arrCommon);
Array
(
[0] => 10
[1] => 11
[2] => 12
[3] => 13
)
Comparar con el uso INCORRECTO de "+"
$arrCommon = $arrA + $arrB;
print_r($arrCommon);
Array
(
[0] => 10
[1] => 11
[2] => 12
)
function array_merge_custom()
{
$array = array();
$arguments = func_num_args();
foreach($arguments as $args)
foreach($args as $key => $value)
$array[$key] = $value;
return $array;
}
the solution could be this:
function array_merge_custom($array1, $array2) {
$mergeArray = [];
$array1Keys = array_keys($array1);
$array2Keys = array_keys($array2);
$keys = array_merge($array1Keys, $array2Keys);
foreach ($keys as $key) {
$mergeArray[$key] = array_merge_recursive(isset($array1[$key]) ? $array1[$key] : [], isset($array2[$key]) ? $array2[$key] : []);
}
return $mergeArray;
}
$array1 = [
''66_'' => [
''k1'' => 1,
''k2'' => 1,
],
''67_'' => [
''k1'' => 1,
''k2'' => 1,
],
''68_'' => [
''k1'' => 1,
''k2'' => 1,
],
68 => [
''k1'' => 1,
''k2'' => 1,
]
];
$array2 = [
''66_'' => [
''a1'' => 1,
''a2'' => 1,
],
''68_'' => [
''b1'' => 1,
''b2'' => 1,
],
68 => [
''b1'' => 1,
''b2'' => 1,
]
];
echo ''<pre>'';
print_r(array_merge_custom($array1, $array2));