PHP实现域名与子域名点击量统计:如何提取有效子域名?
PHP域名点击量统计解决方案
核心问题解决:提取有效子域名
对于类似mobile.sports.yahoo.com的域名,通过拆分域名片段+倒序拼接就能生成所有符合要求的有效子域名:
- 用
explode('.', $domain)将域名拆分为层级片段数组,比如mobile.sports.yahoo.com会拆成['mobile', 'sports', 'yahoo', 'com'] - 从最后一个片段开始逐步向前拼接,每次拼接结果都是一个有效子域名:
- 第一步:
com - 第二步:
yahoo.com - 第三步:
sports.yahoo.com - 第四步:
mobile.sports.yahoo.com
- 第一步:
完整实现函数
function calculateClicksByDomain($counts) { $totalClicks = []; foreach ($counts as $item) { // 拆分点击次数与域名 list($clickCount, $domain) = explode(',', $item); $clickCount = (int)$clickCount; // 将域名拆分为层级片段 $domainParts = explode('.', $domain); $partCount = count($domainParts); $currentDomain = ''; // 倒序遍历片段,拼接所有有效子域名 for ($i = $partCount - 1; $i >= 0; $i--) { $currentDomain = $currentDomain === '' ? $domainParts[$i] : $domainParts[$i] . '.' . $currentDomain; // 累加对应域名的点击量 $totalClicks[$currentDomain] = isset($totalClicks[$currentDomain]) ? $totalClicks[$currentDomain] + $clickCount : $clickCount; } } return $totalClicks; } // 测试调用示例 $counts = [ "900,google.com", "60,mail.yahoo.com", "10,mobile.sports.yahoo.com", "40,sports.yahoo.com", "300,yahoo.com", "10,stackoverflow.com", "20,overflow.com", "5,com.com", "2,en.wikipedia.org", "1,m.wikipedia.org", "1,mobile.sports", "1,google.co.uk" ]; print_r(calculateClicksByDomain($counts));
函数说明
- 遍历输入数组的每条记录,拆分出点击次数和目标域名
- 通过倒序拼接域名片段,生成所有从右到左的有效层级域名
- 用关联数组存储每个域名的总点击量,重复域名自动累加次数
运行代码后会得到所有域名及子域名的总点击量,比如com的总点击量为1350,yahoo.com的总点击量为410等。
内容的提问来源于stack exchange,提问作者Hassan Farooq
相关产品推荐
相关产品推荐

