2016-10-01 4 views
0

PHP의 iterator_to_array 기능을 이해하는 데 어려움을 겪고 있습니다.PHP의 iterator_to_array 함수는 무엇입니까?

설명서를 읽으려고했으나 도움이되지 않았습니다.

어떻게 사용할 수 있습니까? 적절한 유스 케이스는 무엇입니까?

+2

자세히보기 : http://php.net/manual/en/function.iterator-to-array.php – Dave

+0

의견을 보내 주셔서 감사합니다 ... i가 설명서를 통해 완전히받지 못해서 내가 여기 물었습니까? –

+0

iterator (인터페이스 Iterator http://php.net/manual/en/class.iterator.php를 구현 한 객체)를 사용하면 "iterator_to_array"함수로 "current"메서드를 반환하는 요소의 배열을 얻을 수 있고 사용하면 매개 변수 "$ use_keys"이면 메소드 키의 결과가 반환 된 배열의 키로 사용됩니다. –

답변

2

간단히 말해서 iterator_to_array() 함수는 Traversable 유형의 반복자를 사용하고 제공된 인수에 따라 연관/비 연관 배열로 변환합니다. 이 기능은 다음의 두 가지 인자를

array iterator_to_array (Traversable $iterator [, bool $use_keys = true ]) 

,

  • 첫번째 인수 the documentation에서 인터페이스 인 Traversal 형이다. IteratorAggregateIterator 클래스 모두이 인터페이스를 확장합니다. 이 같은 사용자 정의 클래스에서이 두 클래스를 구현할 수 있습니다

    class myIterator implements IteratorAggregate { 
        private $array = array('key1'=>'value1', 'value2', 'value3', 'value4'); 
    
        public function getIterator(){ 
         return new ArrayIterator($this->array); 
        } 
    } 
    
    $obj = new myIterator; 
    $array = iterator_to_array($obj->getIterator(), true); 
    var_dump($array); 
    

    또는를

    class myIterator implements Iterator { 
        private $key; 
        private $array = array('key1'=>'value1', 'value2', 'value3', 'value4'); 
    
        public function __construct(){ 
         $this->key = key($this->array); 
        } 
    
        public function rewind(){ 
         reset($this->array); 
         $this->key = key($this->array); 
        } 
    
        public function current(){ 
         return $this->array[$this->key]; 
        } 
    
        public function key(){ 
         return $this->key; 
        } 
    
        public function next(){ 
         next($this->array); 
         $this->key = key($this->array); 
        } 
    
        public function valid(){ 
         return isset($this->array[$this->key]); 
        } 
    } 
    
    $obj = new myIterator; 
    $array = iterator_to_array($obj, true); 
    var_dump($array); 
    

    여기에서 주목해야 할 가장 중요한 점은 인터페이스를 구현해야합니다 iterator_to_array() 함수에 전달하는 인수 1 Traversable이므로이 유형의 배열이나 객체를이 함수에 직접 전달할 수는 없습니다. 인덱스 또는하지 반복자 요소 키를 사용할지 여부를 나타 내기 위해,

    $array = array('key1'=>'value1', 'value2', 'value3', 'value4'); 
    $array = iterator_to_array($array, true); // wrong 
    
  • 번째 인수는 부울 값이고, 다음의 예를 참조. Example #1 here을 참조하십시오. 그들은 당신이 foreach 루프 내에서 데이터의 사용자 정의 순서를 사용할 수 있기 때문에

0

반복자 유용합니다. the PHP manual에서 예 (약간 아래로 깎았)의이 보자 :

class myIterator implements Iterator { 
    private $position = 0; 
    private $array = array(
     "firstelement", 
     "secondelement", 
     "lastelement", 
    ); 

    public function __construct() { 
     $this->position = 0; 
    } 

    function rewind() { 
     $this->position = 0; 
    } 

    function current() { 
     return $this->array[$this->position]; 
    } 

    function key() { 
     return $this->position; 
    } 

    function next() { 
     ++$this->position; 
    } 

    function valid() { 
     return isset($this->array[$this->position]); 
    } 
} 

$it = new myIterator; 

그것을 반복하기 위해, 우리는 단지 배열과 같은 foreach 루프를 사용할 수 있습니다

foreach($it as $ele){ 
    echo $ele; 
} 
배열과는 달리

그러나, 먼저 반복하지 않고 단일 요소에 액세스 할 수 없습니다.

$array = iterator_to_array($it); 

// "secondelement" 
echo $array[1]; 
:

/* 
* Fatal error: Uncaught Error: Cannot use object of type myIterator as array 
* in /home/hpierce/sandbox.php 
*/ 
echo $it[1]; 

//Iterating to the second element. 
$it->next(); 

// "secondelement" 
echo $it->current(); 

당신은 추가 단계없이 요소에 액세스 한 후 배열로 반복자를 캐스팅 iterator_to_array()을 사용할 수있는 하나의 요소에 액세스하려면 : 그렇게하려고하면 당신에게 치명적인 오류를 줄 것이다

반복기 내에서 단일 요소에 액세스해야한다는 것을 알고있는 경우 ArrayIterator을 대신 사용해야합니다.

관련 문제