2012-06-11 20 views
0

我有2个数组,并希望将它们合并在一起,并且在第二个数组中找不到该项插入一个具有空值的键。 基本上从array2中匹配2个array1子项添加项目; Array2的长度不必与数组1的长度相同,其长度也较小。php基于2个子项合并multidemisional数组

阵列1

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

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

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

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

和数组2:

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

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

结果:

[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] = '' 

我想在这里foudn一些建议,他们都归结为一个dimesnional阵列或匹配索引。任何消化?

回答

0

让PHP为你做的匹配,通过数组的键:

$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

我试过了,效果很棒! 将两个键连接在一起的不错技巧,想到了一些类似的东西,但是te te数组本身使用了一个额外的唯一键(结合了2个searchkey)。 这很容易,谢谢。 – Peter

0

你有没有试过类似的东西?

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

你可以使用一些这样的事:

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

你不需要为空字符串'功能',在未来的迭代中,你可以用isset来检查它。保持简单,不要创建你不需要或难以维护的结构。这将适用于n个子密钥并且不需要维护。

$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

这不起作用,它会将array2中的所有内容附加到array1中,从array1中最高的一个索引开始计数 – Peter

+0

true.let我重做那个。 –