2016-04-24 38 views
2

我有兩個數組,$ ids和$ quants(ids和庫存項的數量)需要組合,但不是替換或刪除重複項,應該添加它們的值一起。組合兩個數組,但將重複鍵的值加在一起

目前我使用array_combine(),但這意味着一些數量會丟失,其中多個相同的id存在。

例如

$ids = Array(1, 1, 2, 3); 
$quants = Array(10, 20, 30, 40); 

所需的輸出:

$combined = Array(
[1] => 30 
[2] => 30 
[3] => 40 
) 

預先感謝任何建議

回答

3
$ids = Array(1, 1, 2, 3); 
$quants = Array(10, 20, 30, 40); 

$a = array_unique($ids); 
$a = array_combine($a, array_fill(0, count($a), 0)); 

foreach($ids as $k=>$v) { 
    $a[$v] += $quants[$k]; 
} 

print_r($a); 
+0

。你的邏輯思維非常強大。 +10 –

+0

我不得不四次讀取它,但是,甚至比我的解決方案還要短。提示:你的'array_combine($ a,array_fill(0,count($ a),0))'可以被'array_fill_keys($ a,0)替代' –

+0

@Peter van der Wal Thanks。我從來沒有見過這個功能 – splash58

1

沒有一個內置的功能,所以你必須做你自己:

根據我的最佳做法
function my_array_combine($keys, $values) 
{ 
    if (count($keys) != count($values)) { 
     throw new InvalidArgumentException('More or less'); 
    } 

    $result = array(); 

    $values = array_values($values); // make sure it is indexed 0, 1, 2 
    foreach(array_values($keys) as $idx => $key) { 
     // Correspondending value is at $values[$idx]; 
     if (isset($result[$key])) { 
      $result[$key] += $values[$idx]; 
     } else { 
      $result[$key] = $values[$idx]; 
     } 
    } 

    return $result; 
} 
+0

感謝您的回答!我會與另一個去,雖然 – hyclrs

+0

@hyclrs我明白,不錯的選擇;) –

相關問題