如何用PHP合并Google Analytics数组中的相似URL并汇总浏览量
解决Google Analytics相似URL浏览量合并的PHP实现
这个需求在处理GA数据时特别常见——不同形式的URL其实指向同一个页面,得把它们的流量合并起来。我来给你详细讲讲怎么实现:
核心思路
首先得明确如何从各种变体URL中提取出统一的核心路径:
- 去掉域名(比如
example.com这类前缀) - 剔除查询参数(
?后面的所有内容,比如?fbclid=xxx、?amp_lite=) - 移除AMP相关的后缀(比如
/amp/路径片段)
最终我们要把所有变体都映射到像/news/259670-lorem-ipsum/这样的标准核心路径上,再累加对应的浏览量。
PHP代码实现
// 原始GA数据数组 $originalData = [ ['/news/259670-lorem-ipsum/', '20715'], ['example.com/news/259670-lorem-ipsum/', '451'], ['example.com/news/259670-lorem-ipsum/?amp_lite=', '5'], ['/news/259670-lorem-ipsum/amp/', '54'], ['/reviews/259671-dolor-amp-sit-amet/', '10732'], ['example.com/reviews/259671-dolor-amp-sit-amet/?fbclid=1234567890', '41'], ['/reviews/259671-dolor-amp-sit-amet/amp/?fbclid=1234567890', '2'], ]; // 初始化合并结果数组 $mergedData = []; foreach ($originalData as $item) { $url = $item[0]; $views = (int)$item[1]; // 把字符串浏览量转成整数,避免字符串拼接 // 1. 解析URL,提取路径部分(自动去掉域名和查询参数) $parsed = parse_url($url); $path = $parsed['path'] ?? ''; // 2. 移除路径中的AMP后缀(比如/amp/) $path = preg_replace('#/amp/$#', '/', $path); // 3. 确保路径格式统一(开头有/,结尾有/,这里根据你的示例调整) if (empty($path)) continue; if ($path[0] !== '/') $path = "/$path"; if (substr($path, -1) !== '/') $path .= '/'; // 4. 累加浏览量 if (isset($mergedData[$path])) { $mergedData[$path] += $views; } else { $mergedData[$path] = $views; } } // 输出结果 print_r($mergedData);
代码解释
parse_url():这是PHP内置的URL解析函数,能把URL拆分成scheme、host、path、query等部分,直接用path就能得到去掉域名和参数的路径,比自己写正则更可靠。preg_replace('#/amp/$#', '/', $path):用正则匹配结尾的/amp/,替换成/,把AMP版本的路径转成原始路径。- 类型转换:把浏览量字符串转成整数
(int)$item[1],不然会变成字符串拼接(比如'20715'+'451'会变成'20715451',而不是21166)。 - 路径格式统一:确保所有核心路径都是以
/开头和结尾,避免因为格式细微差异导致无法合并(比如news/xxx和/news/xxx/被当成不同路径)。
运行这段代码后,就能得到你期望的结果:
Array ( [/news/259670-lorem-ipsum/] => 21225 [/reviews/259671-dolor-amp-sit-amet/] => 10775 )
内容的提问来源于stack exchange,提问作者Rafaucau
相关产品推荐
相关产品推荐

