繁体   English   中英

PHP:While循环条件

[英]PHP: While loop condition

$result= db_query("SELECT dayoff FROM specificdayoff");
$node->frmdate = mktime(0,0,0, $node->frmdate['month'], $node->frmdate['day'],$node->frmdate['year']);
$node->todate = mktime(0,0,0, $node->todate['month'], $node->todate['day'],$node->todate['year']);
$node->dayoff = mktime(0,0,0, $node->dayoff['month'], $node->dayoff['day'],$node->dayoff['year']);
$data = $node->dayoff;
$frmdate = $node->frmdate;
$todate = $node->todate;    

$iii=0;
while($frmdate!=$todate)
{
    while($data= db_fetch_object($result))
    {
        if($frmdate==$data)
        {
            $iii++;
           //debug
        }

    }
    $frmdate=mktime(0, 0, 0, date("m", $frmdate), date("d", $frmdate)+1, date("Y", $frmdate));
    //debug2     
   }
$diff=$iii

我需要的所有元素$frmdate与所有元素相比较$data 但是,当我运行这段代码时, $diff继续返回0。这意味着,我的if语句出了点问题,但是我似乎无法弄清楚它到底出了什么问题。

当我调试此代码块时,两个while循环都没有按我的要求运行。 第二个while循环仅运行一次。 我需要第2个while循环在每次第1个while循环运行时运行。 任何帮助?

这样的调试运行:debug debug debug debug2 debug2 debug2

我需要它像这样运行:调试调试调试debug2调试调试调试debug2调试调试调试debug2

您说的问题是这样的:

while($data= db_fetch_object($result))

发生的事情是,在循环运行一次之后,您将获取所有结果,因此一无所有。 再次执行循环,仍然没有结果,因为您已经获取了所有结果。 您需要再次设置$result 您没有包括此代码,而是寻找类似于$result = ...

像这样的东西:

$node->frmdate = mktime(0,0,0, $node->frmdate['month'], $node->frmdate['day'],$node->frmdate['year']);
$node->todate = mktime(0,0,0, $node->todate['month'], $node->todate['day'],$node->todate['year']);
$node->dayoff = mktime(0,0,0, $node->dayoff['month'], $node->dayoff['day'],$node->dayoff['year']);
$data = $node->dayoff;
$frmdate = $node->frmdate;
$todate = $node->todate;    

$iii=0;
while($frmdate!=$todate)
{
    $result= db_query("SELECT dayoff FROM specificdayoff");
    while($data= db_fetch_object($result))
    {
        if($frmdate==$data)
        {
            $iii++;
        }
    }
    $frmdate=mktime(0, 0, 0, date("m", $frmdate), date("d", $frmdate)+1, date("Y", $frmdate));  
}
$diff=$iii

$ frmdate是一个简单的PHP timstamp,由mktime()创建。 然后,您可以再次比较该时间戳记值,再比较由数据库访存语句创建的对象 时间戳和数据库获取对象永远不会相等,因此while循环的$iii++永远不会被触发。

我感觉到您的specificdayoff休假表中有时间戳记。 如果是这种情况,则您的db_fetch_object方法将检索具有dayoff属性的对象。

要访问它,您可以使用$data->dayoff 因此,您需要将if($frmdate==$data)的条件更改为if($frmdata == $data->dayoff)

所有这些都是在不完全知道db_fetch_object将返回什么的情况下进行的。 就是说,我仍然不完全了解这里应该发生的情况,这可能只是您遇到的一些问题之一。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM