2010-05-02 6 views
0

젠드 프레임 워크 기반의 이메일 프로젝트에서 일하고 있는데, 일부 코드 샘플을 온라인으로 따르고 있습니다. 분명히 이메일 메시지의 다른 '부분'을 반복하는 코드 줄을 이해할 수 없습니다. 나는 그것이 어떻게 작동하는지 전혀 모른다. 그리고 파서가 올바르게 보이지 않는 어떤 에러가 발생한다는 것을 의심해라.이 코드는 어떤 기능을합니까? php에서 재귀 적 반복자?

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

위의 foreach 루프는 무엇을 의미합니까?

+0

참조 : http://php.net/RecursiveIteratorIterator – outis

답변

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

+0

getMessage는 실제로 메시지 번호 $ i를 반환한다. - Zend_Mail_Message 클래스의 객체 ... 내가 이해할 수없는 것은 재귀 적 반복자가하는 일이다. – Ali

+0

it은 자신을 호출하는 부분에 대해 반복 (반복)합니다. 이전에 사용한 문맥은 디렉토리 반복을위한 것입니다. 답변에 예제를 추가 할 것입니다. – Gazler

2

간단히 말해서 문은 mail-> getMessage에 트리 구조를 더 단순하게 목록으로 만들기 위해 포함 된 모든 요소를 ​​반복합니다.

반복적 인 반복자는 트리를 통과하는 데 사용됩니다 (또는 반복자를 포함 할 수있는 더 정확하게 반복자). The RecursiveIteratorIterator class 설명서는이 기능을 특히 잘 설명하지는 않지만 예제를 통해 읽습니다.