2010-05-02 25 views
0

我正在開發一個基於zend框架的電子郵件項目,我正在關注一些代碼示例。我無法理解這行代碼,它顯然是通過電子郵件的不同「部分」循環的。我不知道它是如何工作順便懷疑發生了一些錯誤發生,我的解析器沒有顯示正確。這段代碼做了什麼?在PHP中的遞歸迭代器?

foreach (new RecursiveIteratorIterator($mail->getMessage($i)) as $ii=>$part) 

上面的foreach循環是什麼意思?

+0

僅供參考:http://php.net/RecursiveIteratorIterator – outis 2010-05-02 11:42:40

回答

1

它創建一個新的遞歸迭代器,它基於消息的內容(id爲$ i)並遍歷電子郵件的各個部分。電子郵件通常由多部分消息組成,因此getmessage方法可能會調用檢索標頭後檢索消息的第一部分。獲取零件的方法可能會調用自身(遞歸),並使用遞增的id返回零件,因此$ ii => $零件。

如果不知道方法調用的全部內容,就很難展開。

示例目錄遞歸

$dir = new RecursiveDirectoryIterator("."); 
foreach(new RecursiveIteratorIterator($dir) as $file) { 
    // find .txt files 
    if (preg_match('/.txt$/i', $file->getFilename())) { 
    } 
} 

編輯2:使用鏈接的網站上的例子:

$foundPart = null; 
foreach (new RecursiveIteratorIterator($mail->getMessage(1)) as $part) { 
     if (strtok($part->contentType, ';') == 'text/plain') { 
      $foundPart = $part; 
      break; 
     } 
} 

這檢索所有部件,並尋找一個明文的一部分。它是遞歸循環的一種方式,允許對其進行操作。

+0

實際上,我不知道遞歸迭​​代器是以什麼開始的,我需要知道什麼,如果我要複製這個語句...怎麼可能它被完成了...只是爲了理解 – Ali 2010-05-02 11:31:30

+0

這個概念getMessage實際上返回消息號$ i - 它是Zend_Mail_Message類的一個對象......我不明白的是遞歸迭代器在這裏做什麼? – Ali 2010-05-02 11:33:07

+0

它循環(遍歷)調用自身的部分(遞歸)我之前使用過的上下文是循環目錄。會給答案增加一個例子。 – Gazler 2010-05-02 11:36:24

2

簡而言之,該語句將遍歷mail-> getMessage包含的所有元素,使樹結構更平坦,使其更像列表。

遞歸迭代器用於遍歷樹 - (或更準確地說可以包含迭代器的迭代器)。 The RecursiveIteratorIterator class文檔沒有特別好的解釋 - 但是通讀例子。