php - PHP 中的 iterator_to_array 函数是什么?

标签 php

我很难理解 PHP 的 iterator_to_array 函数。

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

这是什么?我该如何使用它?什么是合适的用例?

最佳答案

简而言之,iterator_to_array() 函数采用 Traversable 类型的迭代器。并将其转换为关联/非关联数组,具体取决于提供的参数。来自 the documentation ,

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

该函数接受以下两个参数,

  • 第一个参数是Traversal 类型,它是一个接口(interface)。两者 IteratorAggregateIterator类扩展了这个接口(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/

相关文章:

java - 识别一个字符是中文并从简体字得到中文 "pinyin"拼音?

php - 使用数组查询

php - 使用 Composer 的 TCPDF hello world 示例

php - Laravel & VueJS 变量定义

php - 添加 xmlns 时出错 :xsi attribute namespace to root element

PHP 函数在 MySQL 中的替代

javascript - 基于第一个下拉列表的动态第二个下拉列表

javascript - 如果我将其放入 js 文件夹中,功能将无法正常工作

php - : sudo pecl install mongodb 时出现 fatal error

php - 基于内容的不同替换