2014-10-17 92 views
0

如何合併兩個數組,並且只在鍵匹配時增加值? 這兩個數組可能都包含在另一箇中不存在的鍵,並且它們都可能具有比另一個更多或更少的鍵。合併數組並增加int值,當鍵匹配在PHP?

所以我不能只帶一個數組,並循環低谷,並與另一個比較,因爲有些時候「其他」數組可能有更多的值。這種情況不時發生。

數組合並似乎沒有工作,因爲它覆蓋舊的值。

我需要從兩個數組中返回所有唯一鍵,但只要鍵匹配,我只需將兩個值相加即可。

Array_a:

["BMW-B2"]=>int(1) 
["BMW-N-115 "]=>int(5) 
["BMW-N-143"]=>int(3) 
["BMW-N-163"]=>int(10) 
["BMW-N-184"]=>int(4) 

Array_b

["CR220036"]=>int(3) 
["BMW-N-163"]=>int(9) 
["CR220822"]=>int(7) 

Array_merged

["BMW-B2"]=>int(1) 
["CR220036"]=>int(3) 
["CR220822"]=>int(7) 
["BMW-N-115 "]=>int(5) 
["BMW-N-143"]=>int(3) 
["BMW-N-163"]=>int(19) // <-- this has increast by 9 
["BMW-N-184"]=>int(4) 

順序並不性重要NT。

+0

寫出你想要的輸入,輸出和結果的最簡單的例子,或者甚至更好的單元測試,你會讓包括你自己在內的每個人都變得更容易 – 2014-10-17 14:44:11

+0

Okei。我已經添加了兩個數組的示例,並且我需要輸出 – ThomasK 2014-10-17 14:50:17

回答

0

如何:

$arr1=array(1,2,3,4); 
$arr2=array(1,2,5=>1); 
$result=array(); 
foreach($arr1 as $k=>$v){ 
    $result[$k]=$v; 
    if(isset($arr2[$k])){ 
     $result[$k]+=$arr2[$k]; 
    } 
} 
foreach($arr2 as $k=>$v){ 
    if(!isset($result[$k]){ 
     $result[$k]=$v; 
    } 
} 
var_dump($result); 
0

您可以通過使用循環和合並陣列實現這一目標。基本上,您選擇一個數組,您將檢查重複值,執行算術操作,不再需要的數組元素,然後將它們合併在一起。

考慮改變你的代碼類似於以下:

$array1 = array("val1" => 5, "val2" => 8, "val3" => 10, "val4" => 2, "val5" => 12); 
$array2 = array("val3" => 9, "val6" => 11, "val1" => 15); 

foreach ($array2 as $key => $value) 
{ 
    if (array_key_exists($key, $array1)) 
    { 
     $array1[$key] += $value; 
     unset($array2[$key]); 
    } 
} 

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

var_dump($merged); 

//Output: 
array(6) { 
    ["val1"]=> 
    int(20) 
    ["val2"]=> 
    int(8) 
    ["val3"]=> 
    int(19) 
    ["val4"]=> 
    int(2) 
    ["val5"]=> 
    int(12) 
    ["val6"]=> 
    int(11) 
} 

在我的例子,在$array2所有的值與$array1相比,存儲的值來查找重複鍵和增量。如果發現重複,則該元素未被設置,這將阻止在array_merge()操作中覆蓋$array1中的修改後的鍵。

+0

謝謝。我會在星期一看看它,並讓你知道:) – ThomasK 2014-10-18 21:16:05