개발! 딱 깔끔하고 센스있게!

반복 기 를 실현 하 는 PHP 류 를 배열 로 합 니 다. 본문

개발 스크랩 메모/PHP

반복 기 를 실현 하 는 PHP 류 를 배열 로 합 니 다.

렉사이 2020. 11. 22. 00:03

만약 에 제 가 인 터 페 이 스 를 실현 하 는 유형 이 있다 면 저 는 foreach 순환 중의 교체 방식 을 수 동 으로 조절 할 수 있 습 니 다.

하지만 내 상 대 를 여러 팀 처럼 일 하 게 만 드 는 다른 방법 은 없 을 까?

예 를 들 어 내 가 디텍터 를 실현 하 는 게 스 트 북 이 있다 고 가정 하면 나 는 foreach (new Guestbook) 을 $entry 로 대체 할 수 있다.

그런데 만약 에 내 가 생각 을 한다 면, 예 를 들 면, 순 서 를 뒤 바 꾸 면?

forreach (areray reverse (new Guestbook () 는 $entry 로 서 는 안 될 것 입 니 다.

areray reverse 는 한 팀 만 받 기 때 문 입 니 다.

내 가 묻 고 싶 은 것 은, 내 가 교체 기 를 사용 할 수 있 는 지 없 는 지 는 단지 forreach 순환 만 이 아니 라 는 것 이다.

감사합니다.

대답

교체 기 인 터 페 이 스 는 개체 가 여러 그룹 처럼 일 할 수 있 도록 forreach 순환 을 허용 하 는 것 이 목적 이다.

여러 조 와 같은 것 을 원한 다 면, 여러 조 를 사용 하 라.

iterator to array 함 수 를 사용 하여 처음부터 끝까지 대상 을 배열 로 바 꿀 수 있 지만 이 과정 을 뒤 집 을 수 는 없습니다.

itervile 대상 의 원 소 를 뒤 바 꿔 야 하 는 순 서 를 보 려 면 reverse () 방법 을 만 들 수 있 습 니 다.

이 방법 은 내부 적 으로 ary reverse () 를 사용 할 수 있 습 니 다.

이런 것:

class Test implements Iterator { private $testing = [0,1,2,3,4,5,6,7,8,9,10]; private $index = 0; public function current() { return $this->testing[$this->index]; } public function next() { $this->index ++; } public function key() { return $this->index; } public function valid() { return isset($this->testing[$this->key()]); } public function rewind() { $this->index = 0; } public function reverse() { $this->testing = array_reverse($this->testing); $this->rewind(); } } $tests = new Test(); var_dump(iterator_to_array($tests)); $tests->reverse(); var_dump(iterator_to_array($tests)); 

출력: -

array (size=11) 0 => int 0 1 => int 1 2 => int 2 3 => int 3 4 => int 4 5 => int 5 6 => int 6 7 => int 7 8 => int 8 9 => int 9 10 => int 10 array (size=11) 0 => int 10 1 => int 9 2 => int 8 3 => int 7 4 => int 6 5 => int 5 6 => int 4 7 => int 3 8 => int 2 9 => int 1 10 => int 0 

나 는 이 코드 를 발표 하기 전에 그것 이 효과 가 있다 는 것 을 증명 하기 위해 서 썼 다.

나 는 그것 을 답 에 넣 는 것 이 좋 겠 다 고 생각한다.

Comments