2010-11-01 20 views
9

je dois obtenir deux tableaux pour fusionner en un seul tout en gardant toutes les clés en place et la liste des valeurs dans un tableau comme dans cet exemple:PHP, fusion des tableaux avec des clés communes

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

Répondre

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; 
} 

Utilisation:

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

PS. Il peut fonctionner avec plus de deux tableaux, il suffit d'en passer autant que vous voulez en tant qu'arguments suivants.

+1

Merci beaucoup Monsieur. – Mohammad

1

Quelque chose comme ça? http://php.net/array_merge_recursive

+1

cela ne produira pas de tableau avec une valeur nulle si la clé est présente uniquement dans un tableau, mais seulement une chaîne avec la valeur du second tableau. –