需求说明:
192.168.1.1,192.168.1.2,192.168.1.3,192.168.2.1,192.168.2.2
转化为:
192.168.1.1-192.169.1.3,192.168.2.1-192.168.2.2
上代码:
<?php
$ips = '10.1.24.30,10.1.24.31,10.1.24.32,10.1.24.41,10.1.24.45,10.1.24.50,10.1.24.51,10.1.24.56,10.1.65.101,10.1.65.109,10.1.65.117,10.1.65.122,10.1.65.126,10.1.65.128,10.1.65.129,10.1.65.135,10.1.65.21,10.1.65.22,10.1.65.25,10.1.65.27,10.1.65.55,10.1.65.82,10.1.65.86,10.1.65.87,10.1.65.88,10.1.65.92,10.1.65.93,10.1.68.25,10.1.69.102,10.1.69.104,10.1.69.105,10.1.69.108,10.1.69.112,10.1.69.113,10.1.69.114,10.1.69.116,10.1.69.117,10.1.69.118,10.1.69.123,10.1.69.124,10.1.69.127,10.1.69.128,10.1.69.129,10.1.69.130,10.1.69.131,10.1.69.132,10.1.69.133,10.1.69.134,10.1.69.135,10.1.69.136,10.1.69.137,10.1.69.142,10.1.69.143,10.1.69.145,10.1.69.146,10.1.69.148,10.1.69.149,10.1.69.150,10.1.69.151,10.1.69.152,10.1.69.156,10.1.69.157,10.1.69.158,10.1.69.160,10.1.69.167,10.1.69.170,10.1.69.171,10.1.69.172,10.1.69.173,10.1.69.175,10.1.69.176,10.1.69.177,10.1.69.178,10.1.69.179,10.1.69.180,10.1.69.181,10.1.69.182,10.1.69.183,10.1.69.184,10.1.69.188,10.1.69.189,10.1.69.190,10.1.69.191,10.1.69.192,10.1.69.193,10.1.69.194,10.1.69.195,10.1.69.196,10.1.69.197,10.1.69.198,10.1.69.201,10.1.69.202,10.1.69.203,10.1.69.204,10.1.69.205,10.1.24.43,10.1.69.209,10.1.16.179,10.1.69.50';
// echo bindec(decbin(ip2long('10.1.24.30')));//转整型后不带符号,10位 2238855303
// echo "-------";
// echo bindec(decbin(ip2long('10.1.24.31')));//转整型后不带符号,10位 2238855303
// die;
$re = makeIpRangeStr($ips);
$re = implode(',', $re);
var_dump($re);die;
function makeIpRangeStr($ips){
$ips_arr = explode(",", $ips);
$ips_arr = ipsort($ips_arr);
$ips_range_arr = array();
$res_ips = [];
foreach ($ips_arr as $key => $value) {
$value_arr = explode(".", $value);
$ips_range_arr[$value_arr[0] . "." . $value_arr[1] . "." . $value_arr[2]][] = $value;
}
$arr_res = array();
foreach($ips_range_arr as $key => $value){
array_push($res_ips,bbb($value));
}
$res_ip = [];
foreach ($res_ips as $key => $value) {
foreach($value as $v){
array_push($res_ip, $v);
}
}
return $res_ip;
}
//整理单个ip段
function bbb($arr){
$length = count($arr);
$arr_res = array();
$arr_res_res = array();
$arr_item = array();
for($i=0;$i<$length;$i++){
array_push($arr_item,$arr[$i]);
if(isset($arr[$i+1])){
$t1 = explode(".",$arr[$i+1]);
$t2 = explode(".",$arr[$i]);
if(end($t1)-end($t2) == 1){
}else{
array_push($arr_res,$arr_item);
$arr_item = array();
}
}else{
array_push($arr_res,$arr_item);
}
}
foreach($arr_res as $value){
array_push($arr_res_res,$value[0] . "-" . end($value));
}
return $arr_res_res;
// var_dump($arr_res_res);die;
}
function ipsort($ips){
$intIps=[];
$ips_arr = [];
foreach($ips as $ip){
array_push($intIps,bindec(decbin(ip2long($ip))));
}
sort($intIps);
foreach($intIps as $intIp ){
array_push($ips_arr,long2ip($intIp));
}
return $ips_arr;
}