2012-09-20 44 views
2

我有兩個數組在php中包含自定義類對象。一個我在while循環中迭代,使用$ h,另一個我通過while循環內的另一個變量$ i訪問以進行比較。如果滿足某個條件,我只在父循環中增加$ i,並且數組中可能有多個同一對象的副本,我需要跳過該副本。php比較運算符在循環內的對象

我的代碼如下:

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

但是,代碼不允許爲陣,這可能會或可能不會發生在一個以上的重複的可能性,我不得不$增量I調用if語句之前手動(它必須遞增至少一次,如果前面的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; 
    } 
} 

回答

0

在PHP中,do-while循環有特殊的行爲。它不同於常規while循環,因爲第一次迭代保證始終運行。在你的代碼中,$ i在比較檢查前已經增加1,而在if語句中,它沒有。

這就是我注意到的兩個代碼塊的區別。您尚未提供有關$ audits數組的足夠信息以提供可靠的解決方案。也許第二個指標超出了界限?

+0

我更新了問題以包含您的課程。 –

+0

你的評論讓我想到了越界 - 我只是在if語句中包含了do-while循環if ifset isset($ audits [$ i + 1])){}' 現在它的工作很精美。謝謝gluxon! –

+0

很高興幫助!很高興知道我有點接近;) – gluxon

0

爲什麼不使用while循環而不使用do-while?在這種情況下,條件將首先以$ i = 0進行評估,然後遞增。

+0

如果第一個IF語句是真的,那麼$ i需要至少增加一次。我的問題是,如果有兩個具有相同ID的對象,我需要增加$ i,直到用該ID到達該數組中的最後一個對象。 –