2012-06-11 21 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我重做那個。 –