는 통과 할 수 있습니다 만 이 클래스 인터페이스가 있습니다.
반복자
다음과 같이 반복자의
첫 번째 요소를 얻을 수있다 :
$iterator->rewind();
if (!$iterator->valid()) {
throw new Exception('There is no any element!');
}
$firstElement = $iterator->current();
확신하는 경우
$iterator
, foreach
에 의해 통과 된 적이 않았거나 루프가 멈추지 않았다면 break;
- 은
$iterator->next();
당신이 앞의 예에서 $iterator->rewind();
를 생략 할 수 있습니다이라고 적이있다.
$iterator
의 요소 수가 이 아니고이 아니라고 확신하는 경우 $iterator->valid()
테스트 조건 블록을 생략 할 수도 있습니다. 이러한 이전 조건은 당신이 필요 후 보존 그렇다면
은 다음과 같습니다
$firstElement = $iterator->current();
IteratorAggregate
당신은 어떤 단순히 첫 번째 요소를 얻을 수 없습니다. IteratorAggergate는 실제로 Iterator 나 다른 IteratorAggregate의 봉투 일뿐입니다. 논리적으로 이것은 끝에 반복자가 있음을 의미합니다. 불행히도 얼마나 많은 레벨이 깊은 지 알 수 없습니다.
첫 번째 요소를 달성하는 가장 간단한 방법은 다음과 같습니다
$array = iterator_to_array($iteratorAggregate);
if (count($array) === 0) {
throw new Exception('There is no any element!');
}
$firstElement = reset($array);
(!하고 놀라 울 정도로 정확히 같은 솔루션은 반복자에 대해서도 작동)
우리는 일반 배열로 변환하는
다음 절차는 usual way to fetch the first element from an array입니다. 불행히도 biig 배열의 경우 이것은 약간 과도한입니다. 왜냐하면 우리는 하나만 필요하지만 모든 요소의 복사본을 만들어야하기 때문입니다.
는 느슨한 것 같다 하나 개의 솔루션이있다 :
while ($iteratorAggregate instanceof \IteratorAggregate) {
$iteratorAggregate = $iteratorAggregate->getIterator();
}
$iterator = $iteratorAggregate;
과는 매우 첫 번째 예에서 반복자처럼 다음 단계에서 우리는 함께 작동합니다. 나는 10000 명의 회원을위한 간단한 벤치 마크를 만들었으며이 솔루션은 거의 6 배 더 빠릅니다. 현재
LLAP
'$를 OBJ>() -> propName' 아마? – Crisp
'var_dump '를 넣고 결과 객체의 구조를 확인하십시오 –
파삭 파삭의 대답이 트릭을 만들었습니다. 그 대답을 sep로 만들면 대답으로 표시됩니다. var_dump는 다음과 같이 쓸모없는 쓰레기를주었습니다 : http://pastebin.com/GeNDbiN4 – neubert