Привет! у меня есть файл в котором содержатся ip адреса, нужно сделать конверт в cidr формат. Подскажите или направьте с решением! заранее спасибо. $ arr = [ '42.0.24.0-42.0.27.255,"CN","China Telecom fujian"', '42.83.88.0-42.83.127.255,"PK","China Telecom Guangdong"', '43.254.36.0-43.254.36.255,"JP","China Telecom Beijing"', '223.223.176.0-223.223.191.255,"KH","China Telecom Beijing"', '27.121.72.0-27.121.79.255,"AU","China Telecom Guangdong"]
lib.php PHP: <?php function cidr2ip($cidr) { $ip_arr = explode('/', $cidr); $start = ip2long($ip_arr[0]); $nm = $ip_arr[1]; $num = pow(2, 32 - $nm); $end = $start + $num - 1; return array($ip_arr[0], long2ip($end)); } function ip2cidr($ips) { $return = array(); $num = ip2long($ips[1]) - ip2long($ips[0]) + 1; $bin = decbin($num); $chunk = str_split($bin); $chunk = array_reverse($chunk); $start = 0; while ($start < count($chunk)) { if ($chunk[$start] != 0) { $start_ip = isset($range) ? long2ip(ip2long($range[1]) + 1) : $ips[0]; $range = cidr2ip($start_ip . '/' . (32 - $start)); $retval[] = $start_ip . '/' . (32 - $start); } $start++; } return $retval; } some.php PHP: <?php include 'lib.php'; $arr = [ '42.0.24.0-42.0.27.255,"CN","China Telecom fujian"', '42.83.88.0-42.83.127.255,"PK","China Telecom Guangdong"', '43.254.36.0-43.254.36.255,"JP","China Telecom Beijing"', '223.223.176.0-223.223.191.255,"KH","China Telecom Beijing"', '27.121.72.0-27.121.79.255,"AU","China Telecom Guangdong"']; foreach($arr as $val){ $str=explode(',', $val); $ips = explode('-',$str[0]); $cidp = ip2cidr([$ips[0],$ips[1]]); $newarr[]=implode('-',$cidp).",$str[1],$str[2]"; } print_r($newarr); Результат Код (Text): Array ( [0] => 42.0.24.0/22,"CN","China Telecom fujian" [1] => 42.83.88.0/21-42.83.96.0/19,"PK","China Telecom Guangdong" [2] => 43.254.36.0/24,"JP","China Telecom Beijing" [3] => 223.223.176.0/20,"KH","China Telecom Beijing" [4] => 27.121.72.0/21,"AU","China Telecom Guangdong" ) Только учти,некоторые диапазоны могут давать сразу 2 строки,поэтому те которые дают 2 строки я разделил с помощью ' - '.Естественно ты можешь при желании изменить разделитель на другой.