经过多次尝试破解这个问题后,我陷入困境,所以我求助于SO。
我有两个数组,如下所示。两个阵列中的键彼此相关。 我需要将两个数组组合在一起作为key =>值对。
例如:
[Internet Explorer] => 3
[Internet Explorer] => 2
然而,在此之后,我需要总计重复键的值。导致每个浏览器的唯一总密钥=>值对。
例如:
[Internet Explorer] => 5
[Google Chrome] => 3
感谢您的关注,我尝试了很多数组函数,并且总是得到相同的结果,即获取没有累计值的唯一键。
Array
(
[0] => Unknown
[1] => Unknown
[2] => Unknown
[3] => Internet Explorer
[4] => Internet Explorer
[5] => Mozilla Firefox
[6] => Internet Explorer
[7] => Unknown
[8] => Unknown
[9] => Google Chrome
[10] => Google Chrome
[11] => Mozilla Firefox
[12] => Mozilla Firefox
[13] => Unknown
)
Array
(
[0] => 1
[1] => 2
[2] => 1
[3] => 1
[4] => 1
[5] => 1
[6] => 1
[7] => 1
[8] => 1
[9] => 1
[10] => 1
[11] => 1
[12] => 2
[13] => 1
)
编辑:为清晰起见添加代码。
$ agent_list是查询的结果,该查询收集USER AGENT的唯一实例并对其进行计数 getBrowser函数搜索每个$ agents并提取浏览器类型。
$agents = array();
$agents_count = array();
foreach($agent_list as $value1)
{
$agent = getBrowser($value1['agent']);
array_push($agents,$agent);
array_push($agents_count,(int)$value1['count']);
}
答案 0 :(得分:1)
希望,我理解你的问题
设$a
,$b
为输入数组,结果将位于$a
foreach($b as $k=>$v){
if(isset($a[$k]))
$a[$k]+=$v;
else
$a[$k]=$v;
}
答案 1 :(得分:1)
假设密钥数组为$keys
且值数组为$values
,则应该可以使用。
$result = array_fill_keys(array_unique($keys), 0);
foreach($keys as $i=>$k){
$result[$k] += $values[$i];
}
答案 2 :(得分:1)
为什么不迭代一个数组并添加值(如果它们存在)或者如果它们不存在则追加:
foreach($array1 as $key => $value){
$array2[$key] += $value;
}
如果$array2
中不存在该值,则会为该值添加或添加键值。