2010-11-01 38 views
9

que necesito para obtener órdenes de dos se funden en uno manteniendo todas las llaves en su lugar y una lista de los valores de una matriz como en este ejemplo:PHP, La fusión de las matrices con las claves comunes

$array1 = array('car' => '3', 'bus' => '2'); 
$array2 = array('dog' => '1', 'car' => '2', 'bird' => '9'); 

$merged = array(
    'car' => array('3','2'), 
    'bus' => array('2',null), 
    'dog' => array(null,'1'), 
    'bird' => (null,'9') 
); 

Respuesta

14
function merge_common_keys(){ 
    $arr = func_get_args(); 
    $num = func_num_args(); 

    $keys = array(); 
    $i = 0; 
    for ($i=0; $i<$num; ++$i){ 
     $keys = array_merge($keys, array_keys($arr[$i])); 
    } 
    $keys = array_unique($keys); 

    $merged = array(); 

    foreach ($keys as $key){ 
     $merged[$key] = array(); 
     for($i=0; $i<$num; ++$i){ 
      $merged[$key][] = isset($arr[$i][$key]) ? $arr[$i][$key] : null; 
     } 
    } 
    return $merged; 
} 

Uso:

$merged = merge_common_keys($array1,$array2); 

PS. Puede funcionar con más de dos arreglos, simplemente pase tantos como desee como próximos argumentos.

+1

Muchas gracias señor. – Mohammad

1
+1

Esto no producirá una matriz con valor nulo si la clave está presente solo en una matriz, pero solo la cadena con el valor de la segunda matriz. –

Cuestiones relacionadas