我正在用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
,我可以正确看到最终结果!
这里我的错误是什么?
答案 0 :(得分:2)
问题是您没有在else
语句中的函数中返回结果。
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);
}
}
试一试。应该工作。
答案 1 :(得分:1)
您还需要return find_next_day();
....
} else {
return find_next_day($result,$days_array);
}
....
答案 2 :(得分:0)
答案说你return find_next_day(...)
是正确的。但是,你不需要这里的递归函数。递归算法用于遍历分支/嵌套层次结构,您不知道分支/嵌套的深度。在这种情况下,您只想评估一系列线性日期。
我建议你使用一个简单的while
循环来检查每个日期,看它是否休息一天(可能限制为$day
的365个增量。)