PHP如何将数组中匹配的IP及对应国家代码结果存入变量$match
实现方案
前置优化说明
file()函数读取文件每行时默认会携带行尾换行符,直接传入geoip_country_code_by_name可能导致匹配异常,建议先对每行IP做trim()处理去除空白字符foreach($contents as $ip => $line)语法中=>左侧是数组键名(也就是你拿到的下标),右侧才是存储的IP行内容,不需要获取下标时直接用foreach($contents as $line)读取IP即可
场景1:仅存储第一个匹配到的结果
如果只需要保留第一个匹配到的GB对应IP记录,代码如下:
<?php $ipfilename = "iplist.txt"; $contents = file($ipfilename); $match = ''; // 先初始化存储变量 foreach($contents as $line) { $ip = trim($line); $country = geoip_country_code_by_name($ip); if ($country == "GB") { // 拼接需要的格式直接赋值给$match $match = $country . " " . $ip; break; // 不需要继续匹配后续IP的话可以加break终止循环,否则会覆盖为最后一个匹配的结果 } } ?>
场景2:存储所有匹配到的结果
如果文件中可能存在多个归属GB的IP,建议用数组存储所有匹配结果:
<?php $ipfilename = "iplist.txt"; $contents = file($ipfilename); $match = []; // 初始化为数组存储多条记录 foreach($contents as $line) { $ip = trim($line); $country = geoip_country_code_by_name($ip); if ($country == "GB") { // 追加匹配结果到数组 $match[] = $country . " " . $ip; } } // 如果需要把所有结果拼接成完整字符串,可以使用implode: // $match = implode(PHP_EOL, $match); ?>
内容的提问来源于stack exchange,提问作者confused
相关产品推荐
相关产品推荐

