PHP中的递归函数

PHP中的递归函数,php,function,recursion,boolean,Php,Function,Recursion,Boolean,我在PHP中的递归函数有问题。我的函数的目的是比较一个ip和一系列ip。以下是我对两个变量的数据模型: Array ( [0] => 150 [1] => 2 [2] => 0 [3] => 155 ) Array ( [0] => Array ( [0] => 150 [1] => 26 [2] => 0 [3] =

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

你有主意了吗?谢谢。

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

return checkRangeIp($ip_array, $range_ip_array, $recur_it + 1);
否则,函数调用将在
if(…)
条件中被评估为
false


注意:看起来您不知怎么搞混了
true
false
。如果值超出范围,则条件
($nb1<$nb2 | |$nb1>$nb3)
为真,在这种情况下,函数返回
true

,如果只是比较每个范围对,则它本身不适合递归。将其改为循环。如果
$nb1<$nb2|124;$nb1>$nb3
,则函数只返回
true
。对于第一个值,
150
,情况并非如此。因此,它不再返回,而是再次调用
checkRangeIp
,但您没有返回该调用的返回值,因此它将不返回任何内容。这就是说,即使这是固定的,我不认为你的范围检查是正确的,这真的不是一个递归解决方案的问题。
return checkRangeIp($ip_array, $range_ip_array, $recur_it + 1);