您可能遇到過,內建的array_merge( PHP 中的) 函數在組合多個陣列時會覆蓋共享鍵的值。當您需要合併數組並對共享鍵的值求和時,這可能會出現問題。
為了解決這個挑戰,我們可以創建一個自訂函數或利用數組操作來實現我們期望的行為。讓我們探索幾種可能的方法:
使用自訂函數
<code class="php">function array_sum_identical_keys() { $arrays = func_get_args(); $keys = array_keys(array_reduce($arrays, function ($keys, $arr) { return $keys + $arr; }, array())); $sums = array(); foreach ($keys as $key) { $sums[$key] = array_reduce($arrays, function ($sum, $arr) use ($key) { return $sum + @$arr[$key]; }); } return $sums; }</code>
此函數接受任意數量的陣列作為參數,並傳回一個關聯數組與組合鍵和求和值。
使用錯誤抑制
<code class="php">$sums = array(); foreach (array_keys($a1 + $a2) as $key) { $sums[$key] = @($a1[$key] + $a2[$key]); }</code>
此技術利用錯誤抑制運算子(@) 來檢查之前兩個陣列中是否存在鍵
使用陣列映射
<code class="php">$keys = array_fill_keys(array_keys($a1 + $a2), 0); $sums = array_map(function ($a1, $a2) { return $a1 + $a2; }, array_merge($keys, $a1), array_merge($keys, $a2));</code>
此方法使用array_fill_keys() 建立映射,然後使用array_map() 新增與共用鍵。
組合解決方案
<code class="php">$sums = array_fill_keys(array_keys($a1 + $a2), 0); array_walk($sums, function (&$value, $key, $arrs) { $value = @($arrs[0][$key] + $arrs[1][$key]); }, array($a1, $a2));</code>
此組合將錯誤抑制技術與 array_walk() 結合,以迭代鍵並執行加法。
結論
根據您的特定需求,您可以選擇最合適的方法來合併多個陣列並對共享鍵的值求和。無論是使用自訂函數、錯誤抑制、陣列映射還是它們的組合,這些解決方案都提供了一種簡潔有效的方法來實現所需的結果。
以上是如何在 PHP 中合併多個關聯數組和共享鍵的求和值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!