我创建了一个帮助函数来返回该月的第一个有效付款日期。如果它是假日(从数据库表中的列表中提取),周六或周日,则该日期无效。在这个例子中,2016年1月1日是假期。
我在CodeIgniter助手中创建了这个递归函数,但我看到了非常奇怪的行为。它应该做的是将第1个标识为假日,自称将第2个标识为星期六,再次将第3个标识为星期日,然后最终将第4个作为第一个有效日返回。
函数调用后,调用后的部分将继续以无限循环运行,除非我插入一个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的怪癖还是我完全误解了我的递归逻辑?
答案 0 :(得分:2)
问题是对逻辑的误解。在您的代码中,不会使用递归调用结果。
if
同时将glUniformMatrix4fv
更改为glUseProgram
,因为我们不需要循环。