2010-05-19 2 views
1

Si j'ai les tableaux suivantsExiste-t-il une fonction PHP pour combiner les résultats de 2 tableaux basés sur des clés?

arry1 = array(
    101 => array(
     'title1' => 'data', 
     'title2' => 'data', 
     'title3' => 'data' 
    ), 
    102 => array(
     'title1' => 'data', 
     'title2' => 'data', 
     'title3' => 'data' 
    ), 
    . 
    . 
    . 
); 

arry2 = array(
    101 => array(
     'title4' => 'data', 
     'title5' => 'data', 
     'title6' => 'data' 
    ), 
    102 => array(
     'title4' => 'data', 
     'title5' => 'data', 
     'title6' => 'data' 
    ), 
    . 
    . 
    . 
); 

et je veux les changer en

arry3 = array(
    101 => array(
     'title1' => 'data', 
     'title2' => 'data', 
     'title3' => 'data', 
     'title4' => 'data', 
     'title5' => 'data', 
     'title6' => 'data' 
    ), 
    102 => array(
     'title1' => 'data', 
     'title2' => 'data', 
     'title3' => 'data', 
     'title4' => 'data', 
     'title5' => 'data', 
     'title6' => 'data' 
    ), 
    . 
    . 
    . 
); 

est-il une simple fonction de php arrays faire cela? Si non, quelle serait la façon la plus efficace de programmer cela?

Merci pour toute aide,
Metropolis

ÉDITÉE
Désolé, je mis à jour les tableaux d'être la façon dont ils devraient en fait être .... array_merge_recursive me donne ce qui suit,

arry3 = array(
    0 => array(
     'title1' => 'data', 
     'title2' => 'data', 
     'title3' => 'data' 
    ), 
    1 => array(
     'title4' => 'data', 
     'title5' => 'data', 
     'title6' => 'data' 
    ), 
    . 
    . 
    . 
); 

J'ai besoin de la 101, et 102 à coller, et j'ai besoin des données pour tous être dans le même tableau de niveau inférieur ....

+1

Ne pas utiliser array_merge_recursive() si vous avez des touches numériques. Les tableaux qui sont stockés sous des clés numériques (comme dans votre cas) ne seront pas fusionnés. –

+0

@Kamil Droit, c'est ce que je cours dans :). Merci pour le commentaire! – Metropolis

Répondre

2

Je suppose que vous voulez ajouter le dernier tableau à la première. Par conséquent, use this:

array_merge_recursive(array1, array2); 

... et ça va faire exactement ce que vous voulez.

EDIT:
Comme il semble que ma solution ci-dessus ne sont pas tout à fait correct, utilisez ceci:

<? 

function array_merge_subarrays(array $array1, array $array2) { 
    $resultArray = array(); 
    // The foreach instead of a plain for is to keep the specific values of the keys 
    foreach ($array1 as $key => $subarray) { 
     $resultArray[$key] = array_merge($subarray, $array2[$key]); 
    } 
    return $resultArray; 
} 

$arr1 = array(
    101 => array(
     'title1' => 'data', 
     'title2' => 'data', 
     'title3' => 'data' 
    ), 
    102 => array(
     'title1' => 'data', 
     'title2' => 'data', 
     'title3' => 'data' 
    ) 
); 

$arr2 = array(
    101 => array(
     'title4' => 'data', 
     'title5' => 'data', 
     'title6' => 'data' 
    ), 
    102 => array(
     'title4' => 'data', 
     'title5' => 'data', 
     'title6' => 'data' 
    ) 
); 

print_r(array_merge_subarrays($arr1, $arr2)); 

/* 

OUTPUTS: 

Array ( 
    [101] => Array ( 
     [title1] => data 
     [title2] => data 
     [title3] => data 
     [title4] => data 
     [title5] => data 
     [title6] => data 
    ) 
    [102] => Array (
     [title1] => data 
     [title2] => data 
     [title3] => data 
     [title4] => data 
     [title5] => data 
     [title6] => data 
    ) 
) 

*/ 

?> 
+0

Je voudrais upvote cela, mais je suis hors des votes pour la journée ... et @sirhc juste pris au niveau suivant dans une course pour gagner une coche verte = b – Josh

+0

Eh bien, ils ont tous les deux tort: ​​p donc pas encore de coche lol – Metropolis

+0

@Metropolis: Oui, je vois. Mise à jour de ma réponse avec un peu auto-écrit un;) –