2016-04-27 69 views
0

我有一個函數,使用php imap函數檢查來自imap服務器的電子郵件。php回去一次循環

該函數檢查從1到x =總郵件的文件夾中的所有電子郵件。

並且在該函數內部有一個腳本,用於檢查電子郵件是否是垃圾郵件,如果是,則將其從服務器中刪除。

當垃圾郵件被刪除時,文件夾上的郵件總數減1,for循環跳過下一封郵件。

例如,收件箱有10封電子郵件,for循環從1到10開始。如果發現電子郵件5是垃圾郵件,它將被刪除,但是當發生這種情況時,6的電子郵件將變爲5,並且for循環跳過這是因爲它試圖讀取電子郵件6.

當發生這種情況時,我該如何回到1?

for(var $i = 1; $i<=$totalMessages; $i++){ 
    if(isSpam()==true){ 
    //delete from imap server 
    $i = $i-1 //does not work, $i = $i -2 does not work eighter 
    } 
} 
+1

怎麼樣才能'isSpam'工作,如果你不要傳遞任何參數,並且不要使用$ i?你可以請張貼重現問題的代碼嗎? – trincot

+0

這是一個檢查。完整的函數有參數。 –

回答

2

你是一個while

$index = 1; 
while($index <= $totalMessages) { 
    if(isSpam()==true){ 
    //delete from imap server 
    } else { 
    $index++; 
    } 
} 
+0

首先我使用了第一個anwser提供的解決方案,但是在for循環中倒退給我帶來了很多不利條件。所以我結束了使用你獲得的那一刻。 tnx RST –

2

這種問題通常是由向後迭代求解:在這種情況下

for(var $i = $totalMessages; $i>= 1; $i--){ 
    // ...etc 
} 
+0

不錯。我會嘗試tnx! –

+0

@AlvaroHernandorena,它對你有用嗎?你能讓我知道嗎? – trincot

+0

是的,它做到了!非常感謝你 –