PHP中的iterator_to_array函数是什么?

Raj*_*tel 6 php

我很难理解PHP的iterator_to_array功能。

我尝试阅读手册,但没有帮助。

它是什么?如何使用?有哪些合适的用例?

Raj*_*aul 7

简而言之,iterator_to_array()函数将使用类型的迭代器,Traversable并将其转换为关联/非关联数组,具体取决于提供的参数。从文档中

array iterator_to_array ( Traversable $iterator [, bool $use_keys = true ] )
Run Code Online (Sandbox Code Playgroud)

该函数采用以下两个参数,

  • 第一个参数的类型为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);
    
    Run Code Online (Sandbox Code Playgroud)

    要么,

    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);
    
    Run Code Online (Sandbox Code Playgroud)

    这里要注意的最重要一点是,传递给iterator_to_array()函数的参数1 必须实现interface Traversable,因此您不能直接将任何其他类型的数组或对象传递给该函数。请参阅以下示例,

    $array = array('key1'=>'value1', 'value2', 'value3', 'value4');
    $array = iterator_to_array($array, true);  // wrong
    
    Run Code Online (Sandbox Code Playgroud)
  • 第二个参数是一个布尔值,用于指示是否将迭代器元素键用作索引。参见示例1