PHP 中的递归函数

发布于 2024-12-23 03:05:48 字数 1041 浏览 1 评论 0原文

我的 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";

我该如何解决这个问题?

I have a problem with my recursive function in PHP. The aim of my function is to compare an IP address with a range of IP addresses. Here is my data model for the two variables:

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
       )
)

I know the iterative method will be probably better, but it's just for training with recursive methods.

So here is my code:

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);
}

I don't know why, but when I test my function it always giving me a false return.

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

How can I fix this problem?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

策马西风 2024-12-30 03:05:48

您有一个 checkRangeIp 退出路径,它不返回任何值(即递归调用)。将其替换为

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

否则函数调用将在 if(...) 条件内被评估为 false

注意:看起来您以某种方式混淆了 truefalse。如果值超出范围,则条件 ($nb1 < $nb2 || $nb1 > $nb3) 为 true,在这种情况下,函数返回 true

You have an exit path of checkRangeIp which does not return any value (namely the recursive call). Replace it by

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

otherwise the function call will be evaluated as false inside your if(...) condition.

Note: It looks like you mixed up somehow true and false. The condition ($nb1 < $nb2 || $nb1 > $nb3) is true if the value lies outside of the range and in this case the function returns true.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文