假设我下面有一个这样的列表(在$ ips数组中),其中包括简单的ip地址和短ip表示法样式的ip。
125.45.
201.35.1.
35.89.18.27
101.135.2
222.122
78.56.21.146
如何使用php将它们转换为ip连字符范围?
即结果应该是
125.45.0.0-125.45.255.255
201.35.1.0-201.35.1.255
35.89.18.27
101.135.2.0-101.135.2.255
222.122.0.0-222.122.255.255
78.56.21.146
答案 0 :(得分:1)
请注意,我这样做是一个有趣的实验。您的问题有点模糊,您自己也没有尝试这样做。话虽如此,该功能应该可以满足您的需求。让我解释一下它的作用:
第一件事,检查ip中的最后一个字符是否为点并将其删除。
第二,计算IP的范围数。
根据IP范围,使用switch/case
语句(比if elseif
恕我直言更清晰)来确定对字符串的处理方式。
最后定义开始范围和结束范围并将它们连接起来。
最后返回结果。
<?php
$ips = array();
$ips[0] = '125.45.';
$ips[1] = '201.35.1.';
$ips[2] = '101.135.2';
$ips[3] = '222.122';
$ips[4] = '78.56.21.146';
foreach($ips as $ip){
echo "\n\nNEW IP RANGE: " . convert_ip($ip) . "\n\n";
}
function convert_ip($ip){
$ip = rtrim($ip, '.');
$ip_count = count( explode('.', $ip) );
switch ($ip_count) {
case 1:
$starting_ip = $ip . '.0.0.0';
$ending_ip = $ip . '.255.255.255';
$return_ip = "$starting_ip-$ending_ip";
break;
case 2:
$starting_ip = $ip . '.0.0';
$ending_ip = $ip . '.255.255';
$return_ip = "$starting_ip-$ending_ip";
break;
case 3:
$starting_ip = $ip . '.0';
$ending_ip = $ip . '.255';
$return_ip = "$starting_ip-$ending_ip";
break;
case 4:
$return_ip = $ip;
break;
default:
$return_ip = 'Unknown';
}
return $return_ip;
}
?>
新IP范围:125.45.0.0-125.45.255.255
新IP范围:201.35.1.0-201.35.1.255
新IP范围:101.135.2.0-101.135.2.255
新IP范围:222.122.0.0-222.122.255.255
新IP范围:78.56.21.146