我创建了一个帮助函数来返回该月的第一个有效付款日期。如果是假日(从数据库表中的列表中拉出),星期六或星期天,则该日无效。在这个例子中,2016年1月1日是假期。PHP递归函数不能按预期工作
我已经在CodeIgniter助手中创建了这个递归函数,但是我看到了很奇怪的行为。它应该做的是将第一个标识为假期,自称将第二个标识为星期六,再次将第三个标识为星期天,然后最终返回第四个作为第一个有效日期。
函数调用本身后,调用后的部分将继续在无限循环中运行,除非我插入一个break ;.如果我插入休息我得到以下输出:
2016-01-01: 1
2016-01-02: 2
2016-01-03: 3
Final: 2016-01-04: 4
Final: 2016-01-04: 4
Final: 2016-01-03: 3
Final: 2016-01-02: 2
最后返回2之前(这是错误的)。提供的功能
function day_check($paymentDate, $paymentDay = 1) {
$CI =& get_instance();
$dateParts = explode("-", $paymentDate);
$holQ = $CI->db->query("SELECT * FROM holidays WHERE holidayDate = '$paymentDate'");
$holR = $holQ->row();
if ($paymentDay <= 0) {
$paymentDay = 1;
}
while (($holR->holidayDate == $paymentDate) || (date("l", strtotime($paymentDate)) == 'Saturday') || (date("l", strtotime($paymentDate)) == 'Sunday')) {
echo "$paymentDate: $paymentDay <br>";
$refinedDay = $dateParts[2] + 1;
if ($refinedDay < 10) {
$refinedDay = "0" . $refinedDay;
}
$paymentDate = $dateParts[0] . "-" . $dateParts[1] . "-" . ($refinedDay);
$paymentDay = $dateParts[2] + 1;
day_check($paymentDate, $paymentDay);
break;
}
echo "Final: $paymentDate: $paymentDay <br>";
return $paymentDay;
}
初始$paymentDate
是2016-01-01
我一直在看这几个小时,我不明白为什么会这样。这是Codeigniter的怪癖还是我完全误解了我的递归逻辑?
'return day_check($ paymentDate,$ paymentDay);'resursive call shoud return,else you again walk the stack again as you output shows – cske