2012-06-11 3 views
0

J'ai 2 tableaux et je voudrais les fusionner ensemble et est l'élément qui ne se trouve pas dans le second tableau insérer une clé avec une valeur vide. Ajoutez de manière élémentaire des éléments de array2 dans array1 correspondant à 2 sous-clés array1; Array2 ne doit pas être de la même longueur que le tableau 1, il est toujours plus petit.php Fusionner un tableau multidimensionnel basé sur 2 sous-clés

array1

[0][item] = 'aaaa' 
    [type] = '1234' 

[1][item] = 'aaaa' 
    [type] = '6789' 

[2][item] = 'bbbb' 
    [type] = '1234' 

[3][item] = 'bbbb' 
    [type] = '6789' 

Et array2:

[0][item] = 'aaaa' 
    [type] = '1234' 
    [feature] = 'www' 

[1][item] = 'aaaa' 
    [type] = '6789' 
    [feature] = 'www' 

Résultat:

[0][item] = 'aaaa' 
    [type] = '1234' 
    [feature] = 'www' 

[1][item] = 'aaaa' 
    [type] = '6789' 
    [feature] = 'www' 

[2][item] = 'bbbb' 
    [type] = '1234' 
    [feature] = '' 

[3][item] = 'bbbb' 
    [type] = '6789' 
    [feature] = '' 

J'ai essayé plusieurs suggestions foudn ici, ils viennent tous à un seul des tableaux dimesnional ou correspondant à l'index . Des sugestions?

Répondre

0

Soit PHP faire la mise en correspondance pour vous, via les clés du tableau:

$result=array(); 
foreach ($array1 as $item) { 
    $item['feature']=''; 
    $result[$item['item'].'-'.$item['type']]=$item; 
} 
foreach ($array2 as $item) { 
    $result[$item['item'].'-'.$item['type']]['feature']=$item['feature']; 
} 
$result=array_values($result); 
+0

Je l'ai essayé, fonctionne comme bon! belle astuce pour relier les 2 clés ensemble, pensait à quelque chose de simulé mais le tableau in te lui-même en utilisant une clé unique supplémentaire (combiner les 2 clés de recherche). C'est beaucoup plus facile, merci. – Peter

0

Avez-vous essayé quelque chose dans quelque chose comme ça?

foreach ($array1 as $key=>$value){ 
    if (isset($array2[$key]['feature'])){ 
     $array1[$key]['feature'] = $array2[$key]['feature']; 
    } else { 
     $array1[$key]['feature'] = ''; 
    } 
} 
0

Vous pouvez utiliser quelque chose comme ceci:

array_walk($array, function ($arr, $key) use ($array2) { 
    if (array_key_exists($key, $array2) && is_array($array2[$key])) { 
     $arr = array_merge($arr, $array2[$key]); 
    } 
}); 
print_r($array); // Will have all missed keys from $array2 
0

Vous n'avez pas besoin de la chaîne vide 'feature', dans une itération future, vous pouvez le vérifier avec isset. Gardez les choses simples et ne créez pas de structures dont vous n'avez pas besoin ou qui sont difficiles à entretenir. Cela fonctionnera pour n nombre de sous-clés et ne nécessite aucune maintenance.

$ar1 = array(
     array('item' => 'aaaa', 'type' => '1234'), 
     array('item' => 'aaaa', 'type' => '6789'), 
     array('item' => 'bbbb', 'type' => '1234'), 
     array('item' => 'bbbb', 'type' => '6789') 
    ); 
    $ar2 = array(
     array('item' => 'aaaa', 'type' => '1234','feature' => 'www'), 
     array('item' => 'aaaa', 'type' => '6789','feature' => 'www') 
    ); 
    for ($i = 0;$i<count($ar1);$i++) { 
     if (array_key_exists($i, $ar2)){ 
      $result[] = array_merge($ar2[$i], $ar1[$i]); 
     } else { 
      $result[] = $ar1[$i]; 
     } 
    } 

// result 
Array 
(
    [0] => Array 
     (
     [item] => aaaa 
     [type] => 1234 
     [feature] => www 
    ) 

    [1] => Array 
    (
     [item] => aaaa 
     [type] => 6789 
     [feature] => www 
    ) 

    [2] => Array 
    (
     [item] => bbbb 
     [type] => 1234 
    ) 

    [3] => Array 
    (
     [item] => bbbb 
     [type] => 6789 
    ) 

) 
+0

cela ne fonctionne pas, il ajoutera tous les itmes de array2 dans array1 en commençant par un index en commençant par le plus haut dans le tableau1 – Peter

+0

true.let me redo cela. –

Questions connexes