PHP:循环条件

时间:2011-10-12 01:48:23

标签: php while-loop

$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循环只运行一次。我需要在循环运行时每次运行第二个while循环。有什么帮助吗?

调试运行如下: 调试 调试 调试 DEBUG2 DEBUG2 DEBUG2

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

3 个答案:

答案 0 :(得分:1)

你说的问题是:

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

答案 1 :(得分:1)

$ frmdate是一个简单的PHP timstamp,由mktime()创建。然后,将此时间戳值再次与数据库提取语句创建的 OBJECT 进行比较。时间戳和数据库提取对象永远不能相等,因此您的while循环$iii++永远不会被触发。

答案 2 :(得分:1)

我觉得你的specificdayoff表中有时间戳。如果是这种情况,那么您的db_fetch_object方法将检索具有dayoff属性的对象。

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

在不确切知道db_fetch_object将返回什么的情况下,这是一个猜测。也就是说,我仍然没有完全遵循应该在这里发生的事情,这可能只是你遇到的一些问题之一。