2010-05-02 72 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文档没有特别好的解释 - 但是通读例子。