PHP函数显示结果但不返回它

时间:2016-08-09 19:43:46

标签: php function return

我正在用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,我可以正确看到最终结果! 这里我的错误是什么?

3 个答案:

答案 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个增量。)

相关问题