2016-08-09 6 views
0

PHPでコードを書いて、翌日営業日を検索しています。これは私のコードです:PHP関数は結果を表示しますが返すことはありません

function find_next_day($today,$days_array) { 
    $day = new DateTime($today); 
    $tomorrow = $day->modify('+1 day'); 
    $result = $tomorrow->format('Y-m-d'); 
    if (!in_array($result,$days_array)) { 
     return $result; 
    } else { 
     find_next_day($result,$days_array); 
    } 
} 

$off_days = array('2016-08-10','2016-08-25','2016-08-09','2016-08-11'); 
echo find_next_day('2016-08-09',$off_days); // I must get returned value as 2016-08-12 

機能が何も返されないのは本当に奇妙です。しかし、関数内で値を返す前にecho $resultを置くと、最終結果が正しく表示されます。
私の間違いは何ですか?

+6

'return find_next_day ... ' –

+1

あなたの返品はIFステートメントに埋もれるべきではありません。関数が何かを返すようにするには、それをすべて返す必要があります。 – durbnpoisn

答えて

2

する必要があります。

function find_next_day($today,$days_array) { 
    $day = new DateTime($today); 
    $tomorrow = $day->modify('+1 day'); 
    $result = $tomorrow->format('Y-m-d'); 
    if (!in_array($result,$days_array)) { 
     return $result; 
    } else { 
     return find_next_day($result,$days_array); 
    } 
} 

これを試してみてください。うまくいくはずです。

+0

@CoderDudeありがとうございました。 –

+0

@MohammadSaberiまた、デフォルトの戻り値があることを確認し、 'if else'sにそれらをカプセル化しないでください。 問題が解決した場合は、その解決策を解決策として受け入れることができます。 –

1

また、問題は、あなたがelse文での関数で結果を返すされていないことであるreturn find_next_day();

.... 
} else { 
    return find_next_day($result,$days_array); 
} 
.... 
+0

お手数ですが、@ mmmありがとうございます。 –

0

答えはreturn find_next_day(...)であるはずです。ただし、ここでは再帰関数は必要ありません。再帰アルゴリズムは、分岐/入れ子構造がどの程度深いかわからない、分岐/入れ子構造の階層を走査するためのものです。この場合、リニアな一連の日付を評価したいだけです。

単純なwhileループを使用して、休日であるかどうかを確認するために、各日付をチェックすることをお勧めします(365刻みで制限すると$day)。

関連する問題