2

我在 php 中有两个包含自定义类对象的数组。一个我使用 $h 在 while 循环中迭代,另一个我通过 while 循环内的另一个变量 $i 访问以进行比较。如果满足某个条件,我只会在父循环中增加 $i ,并且数组中可能存在同一对象的多个副本,我需要跳过这些副本。

我的代码如下所示:

$h = 0;
$i = 0
$j = 10; // Number determined elsewhere but statically entered for example purposes

while ($h < $j)
{
    if ($audits[$i]->id == $auditIDs[$h])
    {
        // Do Stuff...

        do
        {
            $i++;
        } while ($audits[$i]->id == $audits[$i+1]->id);
    }
    else
    {
        // Do stuff...
    }
    $h++;
}

如果我用 === 替换 == 比较运算符,它仍然会失败。但是,用一个简单的 IF 语句替换 do-while 循环是可行的。

if ($audits[$i]->id == $audits[$i+1]->id)
{
    $i++;
}

但是该代码不允许数组中存在多个重复项,这可能会发生也可能不会发生,并且我必须在调用 if 语句之前手动增加 $i (如果前一个 if 必须至少增加一次)语句评估为真)。

任何人都可以对这种情况有所了解吗?感谢您的帮助!

class auditItem
{
    public $login;
    public $points;
    public $date;
    public $onTime;
    public $name;
    public $id;
    public $msg;

    function auditItem($login, $points, $date, $name, $id, $msg)
    {
        $this->login = $login;
        $this->points = $points;
        $this->date = $date;
        $this->name = $name;
        $this->id = $id;
        $this->msg = $msg;
    }
}
4

2 回答 2

0

为什么不使用 while 循环而不是 do-while?在这种情况下,条件将首先在 $i=0 处进行评估,然后递增。

于 2012-09-20T01:37:28.560 回答
0

在 PHP 中,do-while 循环具有特殊的行为。它与常规 while 循环的不同之处在于保证第一次迭代始终运行。在您的代码中, $i 在比较检查之前已经增加了 1,而在 if 语句中,它没有。

这就是我注意到的两个代码块的区别。您没有提供有关 $audits 数组的足够信息来提供可靠的解决方案。也许第二个索引超出范围?

于 2012-09-20T01:31:20.563 回答