将 ip 短符号转换为 CIDR 符号

convert ip short notation into CIDR notation

假设我有一个像下面这样的列表(在数组 $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

请注意,这是我做的一个有趣的实验。你的问题有点含糊,你自己也没有表现出任何尝试。话虽这么说,这个功能应该完成你想要的。让我解释一下它的作用:

首先,检查 ip 中的最后一个字符是否为点并将其删除。

其次,数一数你的 IP 有多少个范围。

第三次使用 switch/case 语句(比 if elseif 恕我直言更清晰)根据 IP 范围确定如何处理字符串。

最后定义起始范围和结束范围并连接它们。

终于return结果。

<?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;

}

?>

NEW IP RANGE: 125.45.0.0-125.45.255.255

NEW IP RANGE: 201.35.1.0-201.35.1.255

NEW IP RANGE: 101.135.2.0-101.135.2.255

NEW IP RANGE: 222.122.0.0-222.122.255.255

NEW IP RANGE: 78.56.21.146