我很难理解 PHP 的 iterator_to_array
函数。
我尝试阅读手册,但没有帮助。
这是什么?我该如何使用它?什么是合适的用例?
最佳答案
简而言之,iterator_to_array()
函数采用 Traversable
类型的迭代器。并将其转换为关联/非关联数组,具体取决于提供的参数。来自 the documentation ,
array iterator_to_array ( Traversable $iterator [, bool $use_keys = true ] )
该函数接受以下两个参数,
第一个参数是
Traversal
类型,它是一个接口(interface)。两者IteratorAggregate
和Iterator
类扩展了这个接口(interface)。您可以在自定义类中实现这两个类,如下所示: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必须实现接口(interface)Traversable
,所以你不能直接将任何其他类型的数组或对象传递给此函数。看下面的例子,$array = array('key1'=>'value1', 'value2', 'value3', 'value4'); $array = iterator_to_array($array, true); // wrong
第二个参数是一个 bool 值,表示是否使用迭代器元素键作为索引。参见 Example #1 here .
关于php - PHP 中的 iterator_to_array 函数是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39805396/