개발자 Q&A

개발하다 막혔다면? 여기서 질문하세요! 초보부터 고수까지, 함께 고민하고 해결하는 공간입니다. 누구나 자유롭게 질문하고 답변을 남겨보세요!

2025.06.19 18:43

MultipleIterator::rewind 사용에 대한 질문

목록
  • 리트코드광 오래 전 2025.06.19 18:43
  • 72
    1
제가 공부 중인 PHP에서 MultipleIterator::rewind 메서드를 사용하여 여러 이터레이터를 동시에 순회하는 방법에 대해 궁금합니다.

제가 이해한 바로는 MultipleIterator::rewind 메서드는 모든 이터레이터를 처음부터 다시 시작하도록 하는 메서드라고 합니다. 하지만 실제로 어떻게 작동하는지 정확히 모르겠습니다.

제가 사용한 코드는 다음과 같습니다.

php

$multi = new MultipleIterator('array');

$multi->attachIterator(new ArrayIterator([1, 2, 3]));

$multi->attachIterator(new ArrayIterator([4, 5, 6]));



foreach ($multi as $value) {

    print_r($value);

}



$multi->rewind();



여기서 문제는 $multi->rewind();를 호출하면 모든 이터레이터가 처음부터 다시 시작하도록 하는 것이 맞나요? 그리고 이 메서드를 호출한 후에 다시 foreach문을 사용하면 이전에 순회한 값은 다시 순회할 수 있나요?

혹시 다른 방법으로 모든 이터레이터를 처음부터 다시 시작할 수 있는 방법이 있나요?

제가 이해한 부분과 틀린 부분이 있으면 알려주시면 감사하겠습니다.

    댓글목록

    profile_image
    나우호스팅  오래 전



    MultipleIterator::rewind 메서드는 모든 이터레이터를 처음부터 다시 시작하도록 하는 메서드입니다. 하지만 이 메서드를 호출한 후에 다시 foreach문을 사용하면 이전에 순회한 값은 다시 순회할 수 없습니다.

    이유는 MultipleIterator::rewind 메서드는 이터레이터의 포인터를 처음으로 이동시킵니다. 하지만 이터레이터의 데이터는 변경되지 않습니다. 따라서 이전에 순회한 값은 다시 순회할 수 없습니다.

    다른 방법으로 모든 이터레이터를 처음부터 다시 시작할 수 있는 방법은 없습니다. 하지만 foreach문을 사용할 때는 이터레이터의 데이터를 변경하지 않는 것이 좋습니다.

    예를 들어, 다음 코드는 모든 이터레이터를 처음부터 다시 시작할 수 있습니다.

    #hostingforum.kr
    php
    
    $multi = new MultipleIterator('array');
    
    $multi->attachIterator(new ArrayIterator([1, 2, 3]));
    
    $multi->attachIterator(new ArrayIterator([4, 5, 6]));
    
    
    
    foreach ($multi as $value) {
    
        print_r($value);
    
    }
    
    
    
    $multi->rewind();
    
    
    
    foreach ($multi as $value) {
    
        print_r($value);
    
    }
    
    


    이 코드에서는 두 번째 foreach문을 사용하여 모든 이터레이터를 처음부터 다시 시작합니다.

    또한, 이터레이터를 detach하고 다시 attach하는 방법도 있습니다.

    #hostingforum.kr
    php
    
    $multi = new MultipleIterator('array');
    
    $multi->attachIterator(new ArrayIterator([1, 2, 3]));
    
    $multi->attachIterator(new ArrayIterator([4, 5, 6]));
    
    
    
    foreach ($multi as $value) {
    
        print_r($value);
    
    }
    
    
    
    $multi->detachIterator(0);
    
    $multi->attachIterator(new ArrayIterator([7, 8, 9]));
    
    
    
    $multi->rewind();
    
    
    
    foreach ($multi as $value) {
    
        print_r($value);
    
    }
    
    


    이 코드에서는 detachIterator 메서드를 사용하여 첫 번째 이터레이터를 detach하고 다시 attachIterator 메서드를 사용하여 새로운 이터레이터를 attach합니다.

    이후 rewind 메서드를 호출하여 모든 이터레이터를 처음부터 다시 시작합니다.

    2025-06-19 18:44

  • 개발자 Q&A 포인트 정책
      글쓰기
      50P
      댓글
      10P
  • 전체 36,773건 / 2 페이지

검색

게시물 검색