2011-12-29 20 views
0

PHPの再帰関数に問題があります。私の機能の目的はipとipの範囲を比較することです。ここでは、2つの変数のための私のデータモデルである:PHPの再帰関数

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 
     ) 

私は反復法は、おそらく良くなるけど、それだけでrecursives方法と訓練のためです。 だからここに私のコードです:

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

アイデアはありますか?ありがとうございました。

+0

それぞれの範囲のペアを比較しているだけなら、それは再帰に役立つものではありません。代わりにそれをループにしてください。 – mario

+0

あなたの関数は、 '$ nb1 <$ nb2 || $ nb1> $ nb3'である。これは最初の値 '150'の場合ではありません。戻り値ではなく、 'checkRangeIp'をもう一度呼び出しますが、その呼び出しの戻り値を返さないので、何も返しません。つまり、これが修正されたとしても、範囲チェックが正しいとは思われません。これは再帰的な解決策では実際問題ではありません。 –

答えて

1

あなたは、任意の値(つまり再帰呼び出しを)返しませんcheckRangeIpの出口経路を持っています。

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

ことによってそれを交換してくださいそうでない場合は、関数呼び出しがあなたのif(...)条件内部falseとして評価されます。

注:それはあなたが何とかtruefalseを混同のように見えます。値が範囲外にある場合、条件($nb1 < $nb2 || $nb1 > $nb3)は真であり、この場合、関数はtrueを返します。