verificar valores repetidos multidimensional elementos concatenar array_unique array_merge_recursive array_merge array agregar php arrays array-merge

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...



$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));