2

phpには、カスタムクラスオブジェクトを含む2つの配列があります。1つは$hを使用してwhileループで反復処理し、もう1つは比較のために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++;
}

==比較演算子を===に置き換えても、失敗します。ただし、do-whileループを単純なIFステートメントに置き換えてください。

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

ただし、そのコードでは、配列内で複数の重複が発生する可能性はありません。これは、発生する場合と発生しない場合があります。ifステートメントを呼び出す前に$ iを手動でインクリメントする必要があります(前のifステートメントの場合は少なくとも1回インクリメントする必要があります)ステートメントは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;
    }
}
4

2 に答える 2

0

PHPでは、do-whileループには特別な動作があります。最初の反復が常に実行されることが保証されているという点で、通常のwhileループとは異なります。あなたのコードでは、$ iは比較チェックの前にすでに1ずつインクリメントされていますが、ifステートメントではそうではありません。

これが、私が気付いた2つのコードブロックの違いです。固溶体を提供するための$audits配列に関する十分な情報が提供されていません。おそらく、2番目のインデックスは範囲外ですか?

于 2012-09-20T01:31:20.563 に答える
0

do-whileの代わりにwhileループを使用してみませんか?その場合、条件は最初に$ i = 0で評価され、その後増分されます。

于 2012-09-20T01:37:28.560 に答える