在PHP中组合数组,计数值和总数

时间:2011-07-14 19:19:25

标签: php arrays

经过多次尝试破解这个问题后,我陷入困境,所以我求助于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']);

}

3 个答案:

答案 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];
}

演示:http://ideone.com/9EIOU

答案 2 :(得分:1)

为什么不迭代一个数组并添加值(如果它们存在)或者如果它们不存在则追加:

foreach($array1 as $key => $value){
    $array2[$key] += $value;
}

如果$array2中不存在该值,则会为该值添加或添加键值。