简而言之,iterator_to_array()函数接受Traversable类型的迭代器,并将其转换为关联/非关联数组,具体取决于提供的参数.从
the documentation,
array iterator_to_array ( Traversable $iterator [, bool $use_keys = true ] )
该函数采用以下两个参数,
>第一个参数是Traversal类型,它是一个接口. IteratorAggregate和Iterator类都扩展了这个接口.您可以在自定义类中实现这两个类,如下所示:
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.