虽然循环只运行一次,但循环只运行一次

时间:2014-01-12 10:25:45

标签: php while-loop

我有一个数据库表,存储哪些天(周一到周日)是工作日,哪些不是。该表包括2个属性,“日”(周一至周日的1,2,3,4,5,6,7)和“工作”。我使用数字'0'和'1'表示他们是否工作日,'1'是非工作日。我在星期五,星期六和星期日的数据库中设置为非工作(5,6,7)。

$addrange = $annstart;
    $minusday = 0; //numbers of nonworking days

    $resultnonworking = mysql_query("SELECT dayid FROM workingdays WHERE working='1'");
    while ($nonworking = mysql_fetch_array($resultnonworking))
    {
        while ($datediffdays > 1)
            {
                $addrange = date('Y-m-d', strtotime($addrange . ' + 1 day'));
                $daycheck = date('N', strtotime($addrange));
                if ($daycheck == $nonworking['dayid'])
                    {
                        $minusday = ++$minusday;
                    }               
                $datediffdays = --$datediffdays;
            }
        $startdaycheck = date('N', strtotime($annstart));
        if ($nonworking['dayid'] == $startdaycheck)
        $minusday = ++$minusday;    
    }

然而,我的while循环只运行一次并检查哪个日期是星期五,而不是星期六和星期日。

有人能发现我的代码有什么问题吗? 提前谢谢。

2 个答案:

答案 0 :(得分:1)

解释你的问题,你的循环如下。

while ($nonworking = mysql_fetch_array($resultnonworking))
{
    while ($datediffdays > 1)
    {

看到它首先获取一条记录,然后直到$datediffdays小于1才运行内循环。 现在当你回到第一个循环时,$datediffdays的值已经小于1,所以它不会进入第二个循环。 为了完成这项工作,你必须在第一个循环中初始化$datediffdays,如

while ($nonworking = mysql_fetch_array($resultnonworking))
{
    $datediffdays = 5;
    while ($datediffdays > 1)
    {

作为您现在所做的更改,在while循环中获取记录,然后只在循环中减少$datediffdays变量的值 因此它正在工作,因为$datediffdays的值在第一次进入循环时未设置为小于1.

我不能建议哪种方法最好,因为你的所有代码都不在这里

答案 1 :(得分:0)

我已经将内部while循环与外部循环切换,并且稍微改变一下,它现在正在工作。但我不知道为什么它会以这种方式工作而不是另一种方式。

$addrange = date('Y-m-d', strtotime($annstart . ' - 1 day'));
    $minusday = 0; //numbers of nonworking days

    while ($datediffdays > 0)
        {
            $addrange = date('Y-m-d', strtotime($addrange . ' + 1 day'));
            $checkrange = date('N', strtotime($addrange));
            $resultnonworking = mysql_query("SELECT * FROM workingdays WHERE working='1'");
            while ($nonworkingcheck = mysql_fetch_array($resultnonworking))
                {
                    if($nonworkingcheck['dayid'] == $checkrange)
                        {

                            $minusday = $minusday + 1;

                        }
                }
            $range = $range." ".$addrange;
            $datediffdays = $datediffdays-1;
        }

    $range = substr($range,11);