2016-10-27 24 views
-1

У меня есть оператор foreach в php, код проверяет, находится ли ip в любом из заданных диапазонов, если это эхо-1, это отлично работает.Looping foreach/else statement

Однако я хотел бы добавить еще для этого, так что если ф не соответствует ни одному из массивов, то эхо 2.

Это не работает, как это кажется эхо 2 для каждого из диапазонов он не соответствует так, что это нежелательно.

Как я действительно есть так, если в диапазоне эхо-1 еще, если не в диапазоне эхо-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 
     } 
    }; 
+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 как последний результат цикла. Есть также перерывы, если вы не хотите продолжать.

+0

Спасибо, Кароль! Отлично работает! – BigC3886