PHP递归函数有什么问题?
我做的功能是显示今天的日期或下一个工作日的日期,如果是周末。函数工作得很好,但返回是错误的PHP递归函数有什么问题?,php,Php,我做的功能是显示今天的日期或下一个工作日的日期,如果是周末。函数工作得很好,但返回是错误的 $today = todayDate('2014-10-18'); // Saturday function todayDate($date) { if(date('N', strtotime($date)) >= 6) { echo 'If - ' . $date . '<br/>'; $date = date(
$today = todayDate('2014-10-18'); // Saturday
function todayDate($date) {
if(date('N', strtotime($date)) >= 6) {
echo 'If - ' . $date . '<br/>';
$date = date('Y-m-d', strtotime('+1 day', strtotime($date)));
todayDate($date);
} else {
echo 'Else - ' . $date . '<br/>';
}
return $date;
}
echo '<br/><br/>Today: ' . $today . '<br/><br/>';
但$today(代码的最后一行)的回声是
那么,怎么了?函数中的最后一个$date是“2014-10-20”,该值返回到今天的$date,但今天的$date显示不同的值。有什么想法吗?正如kojiro在评论中指出的,您没有将内部调用的返回值分配给
todayDate()
。要更改此项,请更换此行
todayDate($date);
与
严格来说,这个函数是递归的,但是你从来不给任何东西分配内部调用的返回值,这段代码的效率非常低。在每次通话中,您都会从字符串->时间戳->字符串重复往返。你为什么不直接传递时间戳和几乎所有的strotime调用呢?它是有效的:-)我认为这个函数是这样运行的:todayDate(2014-10-18)>if>date+1=2014-10-19>todayDate(2014-10-19)>if>date+1=2014-10-20>todayDate(2014-10-20)>else>return-->最后的日期值是2014-10-20$date=todayDate($date)从我的脑海中消失了,但重要的是,它能起作用。非常感谢。您应该熟悉函数返回值的概念。递归函数会导致复杂的错误。哦,今天我看了这个函数,然后。。。我有,谢谢
Today: 2014-10-19
todayDate($date);
$date = todayDate($date);