【问题标题】:PHP function shows result but does not return itPHP函数显示结果但不返回它
【发布时间】:2016-12-15 23:57:47
【问题描述】:

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

【问题讨论】:

  • return find_next_day...
  • 你的回报不应该埋在 IF 声明中。如果你想让函数返回一些东西,它必须一直返回它。

标签: php function return


【解决方案1】:

问题是您没有在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);
    }
}

试试这个。应该可以。

【讨论】:

  • 感谢@CoderDude 的快速帮助。
  • @MohammadSaberi 您还应该确保有一个默认返回值,而不是将它们封装在if elses 中。如果您的问题得到解决,您可以接受答案作为解决方案。
【解决方案2】:

您还需要return find_next_day();

....
} else {
    return find_next_day($result,$days_array);
}
....

【讨论】:

  • 感谢@mmm 的指导。
【解决方案3】:

说你应该return find_next_day(...) 的答案是正确的。但是,这里不需要递归函数。递归算法用于遍历分支/嵌套层次结构,您不知道分支/嵌套的深度。在这种情况下,您只想评估一系列线性日期。

我建议您使用简单的while 循环来检查每个日期以查看是否是休息日(可能限制为$day 增量为365)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-08
    • 2022-06-17
    • 1970-01-01
    • 1970-01-01
    • 2015-08-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多