7

ご存じのとおり、 range() 関数は数値と数値の間の範囲を取得できます。

例としてIPで同じことを行う方法
..

$range_one = "1.1.1.1";
$range_two = "1.1.3.5";
print_r( range($range_one, $range_two) ); 

 /* I want a result of :
     1.1.1.1
     1.1.2.2
     1.1.3.3
     1.1.3.4
     1.1.3.5
 */

私は、explode() 関数を使用して「 . 」を分解し、各数値を分離し、それらのそれぞれに範囲を使用してから、それらをすべて結合することを考えていました。

4

3 に答える 3

14

ip2longを使用して、IP アドレスを整数に変換できます。古いIPv4アドレスで機能する関数は次のとおりです。

/* Generate a list of all IP addresses
   between $start and $end (inclusive). */
function ip_range($start, $end) {
  $start = ip2long($start);
  $end = ip2long($end);
  return array_map('long2ip', range($start, $end) );
}

$range_one = "1.1.1.1";
$range_two = "1.1.3.5";
print_r( ip_range($range_one, $range_two) );
于 2012-08-28T22:33:26.753 に答える
3

これはどう:

$range_one = "1.1.1.1";
$range_two = "1.1.3.5";
$ip1 = ip2long ($range_one);
$ip2 = ip2long ($range_two);
while ($ip1 <= $ip2) {
    print_r (long2ip($ip1) . "\n");
    $ip1 ++;

}

アップデート:

ところで、期待される出力は正確な範囲ではありません。たとえば、次の IP1.1.1.1は is1.1.1.2であり、not1.1.2.2です。

于 2012-08-28T22:29:35.490 に答える
-1

inet_ntop、inet_pton http://www.php.net/manual/en/function.inet-ntop.phpを使用できます。

于 2012-08-28T22:30:54.210 に答える