2016-04-24 10 views
2

2つの配列、$ idsと$ quants(idsとストックアイテム)を結合する必要があるが、重複を置き換えたり削除したりする代わりに、一緒に。2つの配列を結合するが、重複するキーの値を合計する

現在、私は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

私はそれを4回読む必要があったが、はい、私の解決策よりも短かった。ヒント: 'array_combine($ a、array_fill(0、count($ a)、0))'は 'array_fill_keys($ a、0)'で置き換えることができます。 –

+0

@Peter van der Walありがとう。私はこの機能に一度も会ったことがありません – 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私は理解する、良い選択;) –

関連する問題