Рекурсивная функция в PHP - PullRequest
0 голосов
/ 29 декабря 2011

У меня проблема с моей рекурсивной функцией в PHP. Цель моей функции - сравнить ip с диапазоном ip. Вот моя модель данных для двух переменных:

Array
(
   [0] => 150
   [1] => 2
   [2] => 0
   [3] => 155
)
Array
(
   [0] => Array
       (
           [0] => 150
           [1] => 26
           [2] => 0
           [3] => 0
       )

   [1] => Array
       (
           [0] => 150
           [1] => 100
           [2] => 255
           [3] => 255
       )

)

Я знаю, что итерационный метод, вероятно, будет лучше, но он предназначен только для обучения рекурсивным методам. Итак, вот мой код:

function checkRangeIp($ip_array, $range_ip_array, $recur_it = 0) {
  if ($recur_it == 4)
    return false;
  $nb1 = $ip_array[$recur_it];
  $nb2 = $range_ip_array[0][$recur_it];
  $nb3 = $range_ip_array[1][$recur_it];

  if ($nb1 < $nb2 || $nb1 > $nb3)
    return true;
  else
    checkRangeIp($ip_array, $range_ip_array, $recur_it + 1);
}

Я не знаю почему, но когда я проверяю свою функцию, она всегда дает мне ложное возвращение.

if (checkRangeIp($ip_array, $range_ip_array))
  echo "TRUE\n";
else
  echo "FALSE\n";

У вас есть идея? Спасибо.

1 Ответ

1 голос
/ 29 декабря 2011

У вас есть выходной путь checkRangeIp, который не возвращает никакого значения (а именно рекурсивный вызов).Замените его на

return checkRangeIp($ip_array, $range_ip_array, $recur_it + 1);

, иначе вызов функции будет оцениваться как false в вашем if(...) условии.

Примечание: похоже, вы как-то перепутали true и false.Условие ($nb1 < $nb2 || $nb1 > $nb3) выполняется, если значение находится за пределами диапазона, и в этом случае функция возвращает true.

...