我在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
}
};
你可以这样做:
$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
作为循环的最后结果。