循环foreach / else语句

时间:2016-10-27 13:44:59

标签: php

我在php中有一个foreach语句,代码检查ip是否在给定的任何范围内,如果它是echo 1,这样可以正常工作。

但是我想为此添加一个else,所以如果ip与任何数组都不匹配,那么回显2.

这不起作用,因为它似乎对于它不匹配的每个范围都回显2,因此它是不希望的回声222。

如果在范围echo 1中,如果不在范围echo 2

中,我该怎么做呢?
$range = (object) array();
    $range->name = 'test1';
    $range->lower = '10.1.5.78';
    $range->upper = '10.1.5.78';
    $public_ip_ranges[] = $range;

    $range = (object) array();
    $range->name = 'test2';
    $range->lower = '146.127.0.0';
    $range->upper = '146.127.255.255';
    $public_ip_ranges[] = $range;


    if (($lngIP=ip2long($ip)) < 0) $lngIP += 4294967296;

    foreach ($public_ip_ranges as $ip_range) {
       if (($lngLow=ip2long($ip_range->lower)) < 0) $lngLow += 4294967296;
       if (($lngHigh=ip2long($ip_range->upper)) < 0) $lngHigh += 4294967296;
       if($lngIP >= $lngLow and $lngIP <= $lngHigh) {
           echo 1;
        } else {
            echo 2;
            break
        }
    };

1 个答案:

答案 0 :(得分:0)

您可以这样做:

$range = (object) array();
$range->name = 'test1';
$range->lower = '10.1.5.78';
$range->upper = '10.1.5.78';
$public_ip_ranges[] = $range;

$range = (object) array();
$range->name = 'test2';
$range->lower = '146.127.0.0';
$range->upper = '146.127.255.255';
$public_ip_ranges[] = $range;


if (($lngIP=ip2long($ip)) < 0) $lngIP += 4294967296;

foreach ($public_ip_ranges as $ip_range) {
   if (($lngLow=ip2long($ip_range->lower)) < 0) $lngLow += 4294967296;
   if (($lngHigh=ip2long($ip_range->upper)) < 0) $lngHigh += 4294967296;
   if($lngIP >= $lngLow && $lngIP <= $lngHigh) {
        $result = 1;
        break;
    } else {
        $result = 2;
        break;
    }
}
echo $result;

在这种情况下,您只是打印$result作为循环的最后结果。如果你不想继续,还有休息时间。