valor unir multidimensional index buscar array_search array php arrays

unir - ¿Cómo puedo combinar matrices PHP?



php array merge multidimensional (10)

Tengo dos matrices de animales (por ejemplo).

$array = array( array( ''id'' => 1, ''name'' => ''Cat'', ), array( ''id'' => 2, ''name'' => ''Mouse'', ) ); $array2 = array( array( ''id'' => 2, ''age'' => 321, ), array( ''id'' => 1, ''age'' => 123, ) );

¿Cómo puedo fusionar las dos matrices en una por ID?


<?php $a = array(''a'' => ''1'', ''b'' => array(''t'' => ''4'', ''g'' => array(''e'' => ''8''))); $b = array(''c'' => ''3'', ''b'' => array(''0'' => ''4'', ''g'' => array(''h'' => ''5'', ''v'' => ''9''))); $c = array_merge_recursive($a, $b); print_r($c); ?>

array_merge_recursive - Fusiona dos o más matrices recursivamente

productos:

Array ( [a] => 1 [b] => Array ( [t] => 4 [g] => Array ( [e] => 8 [h] => 5 [v] => 9 ) [0] => 4 ) [c] => 3 )



En primer lugar, ¿por qué no usa la ID como índice (o clave, en la matriz de estilo de mapeo que las matrices php son imo)?

$array = array( 1 => array( ''name'' => ''Cat'', ), 2 => array( ''name'' => ''Mouse'', ) );

después de eso, tendrás que avanzar por una matriz y realizar una matriz_merge en los elementos de la otra:

foreach($array2 as $key=>$value) { if(!is_array($array[$key])) $array[$key] = $value; else $array[$key] = array_merge($array[key], $value); }

Algo así al menos. Tal vez hay una mejor solución?


Esto hace lo que Erik sugirió (número de identificación como clave de matriz) y fusiona los vlaues en $array2 a $results .

$results = array(); foreach($array as $subarray) { $results[$subarray[''id'']] = array(''name'' => $subarray[''name'']); } foreach($array2 as $subarray) { if(array_key_exists($subarray[''id''], $results)) { // Loop through $subarray would go here if you have extra $results[$subarray[''id'']][''age''] = $subarray[''age'']; } }


foreach ($array as $a) $new_array[$a[''id'']][''name''] = $a[''name'']; foreach ($array2 as $a) $new_array[$a[''id'']][''age''] = $a[''age''];

y este es el resultado:

[1] => Array ( [name] => Cat [age] => 123 ) [2] => Array ( [name] => Mouse [age] => 321 )


<?php $array1 = array("color" => "red", 2, 4); $array2 = array("a", "b", "color" => "green", "shape" => "trapezoid", 4); $result = array_merge($array1, $array2); print_r($result); ?>


Con PHP 5.3 puedes hacer este tipo de combinación con array_replace_recursive ()

http://www.php.net/manual/en/function.array-replace-recursive.php

Tu matriz resultante debería verse así:

Array ( [0] => Array ( [id] => 2 [name] => Cat [age] => 321 ) [1] => Array ( [id] => 1 [name] => Mouse [age] => 123 ) )

Que es lo que creo que querías como resultado.


Preferiría array_splice sobre array_merge debido a sus problemas de rendimiento, mi solución sería:

<?php array_splice($array1,count($array1),0,$array2); ?>


$new = array(); foreach ($array as $arr) { $match = false; foreach ($array2 as $arr2) { if ($arr[''id''] == $arr2[''id'']) { $match = true; $new[] = array_merge($arr, $arr2); break; } } if ( !$match ) $new[] = $arr; }


@Andy

Ya lo he visto y no vi cómo puede ayudar a fusionar matrices multidimensionales. Tal vez podrías dar un ejemplo.

@kevin

Eso es probablemente lo que tendré que hacer, ya que creo que el código siguiente será muy lento. El código real es un poco diferente porque estoy usando ADOdb (y ODBC para la otra consulta) pero lo haré funcionar y publicaré mi propia respuesta.

Esto funciona, sin embargo, creo que será muy lento ya que pasa por el segundo ciclo cada vez:

foreach($array as &$animal) { foreach($array2 as $animal2) { if($animal[''id''] === $animal2[''id'']) { $animal = array_merge($animal, $animal2); break; } } }