
本文介绍如何使用 php 遍历含嵌套结构的数值索引数组,提取所有 `remote_address.ip` 值,并统计**除指定“基准 ip”(如首个 ip 或外部传入的母 ip)以外的唯一 ip 及其出现频次**。
在处理网络请求日志、爬虫结果或 API 响应等场景时,我们常遇到类似结构的多维数组:每个元素代表一次请求,包含 url、remote_address(含 ip 和 port)及 headers 等字段。若需分析真实客户端分布或识别异常调用源,常需排除已知可信/基准 IP(如本机出口 IP 或首次出现的 IP),再统计其余 IP 的去重频次。
核心思路是:
- 安全提取每项中的 remote_address.ip(需校验键是否存在,避免 Notice);
- 跳过基准 IP(可设为 $motherIp 变量,例如取 $data[0]['remote_address']['ip'] 或由外部传入);
- 使用关联数组以 IP 为键、计数为值,实现高效去重与累加。
以下是完整、健壮的 PHP 7.4+ 实现:
出现次数 print_r($ipCounts); // 示例输出: // Array // ( // [2.2.2.2] => 2 // [3.3.3.3] => 1 // [4.4.4.4] => 1 // ) ?>
✅ 关键注意事项:
立即学习“PHP免费学习笔记(深入)”;
- 永远不要假设嵌套键一定存在:务必使用 ?? 空合并操作符或 isset() 检查,防止未定义索引警告;
- 区分“首次出现”与“基准 IP”:题干中“not the first IP”指逻辑上的参考 IP(如可信网关),而非数组中第 0 项的 IP —— 若需严格排除 首次出现的任意 IP,可先遍历一次获取首个非空 IP 再二次统计;
- 如需返回唯一 IP 列表(不计数),可改用 array_unique(array_column($filteredItems, 'ip')),但当前需求明确要求“count unique values”,故推荐哈希累加法;
- 性能提示:该方案时间复杂度为 O(n),空间复杂度 O(k)(k 为不同 IP 数量),适用于万级以下数据;超大数据建议结合数据库或 Redis 统计。
通过此方法,您不仅能准确统计目标 IP 分布,还能轻松扩展至其他字段(如按 content-encoding 分组计数),为数据分析提供坚实基础。











