我有两个数组:
$array1 = array (a => '501', b => '1');
$array2 = array (a => '501', b => '2');
合并后的数组应如下所示:
$merged_array = array (a => '501', b => '3');
我尝试了许多建议,其中之一是:
$sums = array();
foreach (array_keys($array1 + $array2) as $key) {
$sums[$key] = (isset($array[$key]) ? $array[$key] : 0) + (isset($array2[$key]) ? $array2[$key] : 0);
}
但这导致:
$merged_array = array (a => '1002', b => '3');
我应该怎么做?任何建议深表感谢
编辑:阅读一些评论后,我意识到我应该更清楚了.见下文
4个数组,注意’a’中的重复项:
$array1 = array (a => '501', b => '1');
$array2 = array (a => '501', b => '2');
$array3 = array (a => '505', b => '1');
$array4 = array (a => '509', b => '1');
4个合并的数组和序列化的内容应类似于
a:2:{s:1:"a";i:501;s:1:"b";i:3; s:1:"a";i:505;s:1:"b";i:1; s:1:"a";i:509;s:1:"b";i:1;}
所以:2x a => ‘501’变成1x a => ‘501’并且它的’b’键变成’3′(总和)
和:1x a => ‘505’和b => ‘1’
和:1x a => ‘509’和b => ‘1’
解决方法:
您可以使用’a’值作为键和’b’值作为值构建一个数组
function map_a_to_b($array) {
return array($array['a'] => $array['b'];
}
将map_a_to_b应用于所有输入数组.然后,您可以递归合并数组:
$merged = array_merge_recursive($array1, $array2, $array3, $array4);
结果将是(对于您的示例):
array ('501' => array('1', '2'),
'505' => '1',
'509' => '1')
现在像这样对内部数组求和:
$summed = array_map(function($item) { return array_sum((array) $item); }, $merged);
并将键值数组转换回您的a / b结构.我不知道它应该是什么样子,因为我无法流畅地读取序列化的数组.因此,如果您需要帮助,请以未序列化的数组形式显示所需的输出.
标签:sum,arrays,php,merge
来源: https://codeday.me/bug/20191031/1975082.html