You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP中如何对相同条件的数组visitor_cv值进行求和?

合并数组中相同字段组合的visitor_cv值的实现方案

嘿,我来帮你搞定这个数组合并的需求!你需要当visitor_day、visitor_id和type这三个字段值完全一致时,把对应的visitor_cv数值相加,合并成一条记录对吧?下面给你两种PHP的实现方法,都是容易理解和复用的:

方法一:遍历数组构建唯一键合并(最直观)

先明确你的原始数组(简化后):

$originalArray = [
    6 => ['type' => 'mail', 'visitor_id' => 4, 'visitor_day' => 20180516, 'visitor_cv' => 1],
    13 => ['type' => 'mail', 'visitor_id' => 4, 'visitor_day' => 20180516, 'visitor_cv' => 1],
    23 => ['type' => 'skype', 'visitor_id' => 4, 'visitor_day' => 20180516, 'visitor_cv' => 1],
    36 => ['type' => 'skype', 'visitor_id' => 4, 'visitor_day' => 20180516, 'visitor_cv' => 1],
];

实现代码如下:

$mergedArray = [];

foreach ($originalArray as $item) {
    // 用三个字段拼接成唯一键,确保相同组合的项归到同一键下
    $key = $item['type'] . '_' . $item['visitor_id'] . '_' . $item['visitor_day'];
    
    if (isset($mergedArray[$key])) {
        // 键已存在则累加visitor_cv
        $mergedArray[$key]['visitor_cv'] += $item['visitor_cv'];
    } else {
        // 键不存在则直接存入当前项
        $mergedArray[$key] = $item;
    }
}

// 重置索引得到纯结果数组(可选,若不需要拼接键则执行)
$finalResult = array_values($mergedArray);

// 输出结果
print_r($finalResult);

逻辑说明:

  • 遍历原始数组的每一项,用type、visitor_id、visitor_day拼接成唯一字符串作为新数组的键,相同字段组合的项会自动匹配到同一个键。
  • 若键已存在,就把当前项的visitor_cv加到已有值上;若不存在,直接将当前项存入新数组。
  • 最后用array_values()可以去掉拼接的自定义键,得到你期望的纯索引数组。

方法二:使用array_reduce函数(更简洁)

如果你偏好函数式编程的写法,array_reduce是个不错的选择:

$finalResult = array_values(array_reduce($originalArray, function ($carry, $item) {
    $key = $item['type'] . '_' . $item['visitor_id'] . '_' . $item['visitor_day'];
    if (isset($carry[$key])) {
        $carry[$key]['visitor_cv'] += $item['visitor_cv'];
    } else {
        $carry[$key] = $item;
    }
    return $carry;
}, []));

print_r($finalResult);

逻辑说明:

  • array_reduce会迭代数组的每一项并传入回调函数,$carry是存储合并结果的累加器。
  • 核心逻辑和方法一完全一致,只是用函数式写法实现,代码更紧凑。

运行任意一种方法后,都会得到你期望的结果:

Array (
    [0] => Array ( [type] => mail [visitor_id] => 4 [visitor_day] => 20180516 [visitor_cv] => 2 )
    [1] => Array ( [type] => skype [visitor_id] => 4 [visitor_day] => 20180516 [visitor_cv] => 2 )
)

内容的提问来源于stack exchange,提问作者Tony

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:20:18