简而言之,iterator_to_array()函数将使用类型的迭代器,Traversable并将其转换为关联/非关联数组,具体取决于提供的参数。从文档中,
array iterator_to_array ( Traversable $iterator [, bool $use_keys = true ] )
Run Code Online (Sandbox Code Playgroud)
该函数采用以下两个参数,
第一个参数的类型为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);
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。
| 归档时间: |
|
| 查看次数: |
3207 次 |
| 最近记录: |