PHP递归函数无法按预期工作

时间:2016-01-04 12:33:52

标签: php codeigniter recursion

我创建了一个帮助函数来返回该月的第一个有效付款日期。如果它是假日(从数据库表中的列表中提取),周六或周日,则该日期无效。在这个例子中,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;

}
提供给函数的

初始$paymentDate2016-01-01

我一直在看这几个小时,我不明白为什么会这样。这是Codeigniter的怪癖还是我完全误解了我的递归逻辑?

1 个答案:

答案 0 :(得分:2)

问题是对逻辑的误解。在您的代码中,不会使用递归调用结果。

if

同时将glUniformMatrix4fv更改为glUseProgram,因为我们不需要循环。