【问题标题】:Incrementing an IP range based on last octet | PHP根据最后一个八位字节增加 IP 范围 | PHP
【发布时间】:2017-01-23 22:44:20
【问题描述】:

我有两个变量,$newIpStart 和 $newIpEnd。

知道如何将最后一个八位字节从$newIpStart 增加到$newIpEnd 并将其存储在数组 f.e. 中吗?


为了更清楚,看一下这个例子。

$newIpStart = '192.168.1.1'; //string
$newIpEnd = '192.168.1.150'; //string

我想获取 192.168.1.1 和 192.168.1.150 之间的所有 IP(包括起始 IP 和结束 IP)。 请注意,在示例 192.168.1 中(前三个八位字节是静态的 - 它们不会改变),只有最后一个需要递增。

所以在这两者之间,我应该得到类似的 IP:

`192.168.1.1` 
`192.168.1.2` 
`192.168.1.3` 
.. n .. 
`192.168.1.150`

获得所有这些 IP 后,我会将其存储在数组中,这样我就可以循环它,并对每个 IP 进行一些操作。

有什么想法吗?

【问题讨论】:

    标签: php arrays ip increment


    【解决方案1】:

    使用爆炸版本:

    $newIpStart = '192.168.1.1';
    $newIpEnd = '192.168.1.150';
    $arrayIpStart = explode('.', $newIpStart);
    $arrayIpEnd = explode('.', $newIpEnd);
    $count = end($arrayIpEnd) - end($arrayIpStart);
    $arrayIpResult = array();
    
    for ($i = 1; $i <= $count; $i++) {
        $arrayIpStart[3] = $i;
        $arrayIpResult []= implode('.', $arrayIpStart);
    }
    
    return $arrayIpResult;
    

    它应该有效,而不是我认为的最佳方式。

    【讨论】:

    • 是的,类似的,但请注意,我需要在脚本中计算 $count 以增加。所以基本上,如果我可以减去,比如192.168.1.150 - 192.168.1.1 = 149 并得到计数,那就太好了,但这是不可能的。 :)
    • 只要做:$count = $arrayIpStart[3] - $arrayIpEnd[3];。看看我的答案已编辑。
    • 完美,刚刚测试。 :) 谢谢大家!
    • 我已经更新了您的 for 循环。使用当前的方法,我得到了想要的结果。感谢您的想法!
    【解决方案2】:

    只需使用一个while循环:

    $base = '192.168.1.'; 
    $ips = array(); 
    $i = 1;
    
    while($i < 150){
        $ips[] = $base.$i;  
        $i++; 
    }
    
    var_dump($ips);
    

    如果您不确定范围的结束,您可以使用字符串函数来获取最后一个八位字节并在循环中使用它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-05-13
      • 2011-11-27
      • 1970-01-01
      • 2015-11-02
      • 1970-01-01
      • 2019-01-02
      • 1970-01-01
      相关资源
      最近更新 更多