【问题标题】:php comparison operators on objects within loops循环内对象的php比较运算符
【发布时间】:2012-09-12 08:48:44
【问题描述】:

我在 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前一个 if 语句的计算结果为 true)。

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

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;
    }
}

【问题讨论】:

    标签: php object loops comparison-operators


    【解决方案1】:

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

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

    【讨论】:

    • 您的评论让我想到了越界——我只是将 do-while 循环包装在 if 语句 if (isset($audits[$i+1])) {} 中,现在它运行良好。谢谢gluxon!
    • 很高兴为您提供帮助!很高兴知道我有点接近;)
    【解决方案2】:

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

    【讨论】:

    • 如果第一个 IF 语句为真,那么 $i 至少需要增加一次。我的问题是,如果有两个具有相同 ID 的对象,我需要增加 $i 直到到达该数组中具有该 ID 的最后一个对象。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-14
    • 2014-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多