将Iterator枚举到数组

时间:2014-02-18 07:42:46

标签: php

所以我有这些Generator个对象 - 你知道,cool new things in PHP 5.5使得懒惰的枚举变得容易。但是,有时候,我不想要延迟枚举:我想获取我通常会迭代的数据并将其全部放入数组 - like LINQ has,但对于PHP。

大多数时候我想要一台发电机,但我还有几次我需要一个阵列。例如,如果有可能多次枚举数据,并且在迭代所有项之前停止枚举过程的可能性很小。

是否有一些内在的PHP函数需要IteratorTraversable并输出一个数组?我真的不想做的是编写我自己的函数/方法。是的,我知道,这是一个简短的程序,但我喜欢避免散布一堆辅助函数。

为了避免不可避免的“使用foreach循环”答案,这就是这种方法:

<?php
function enumerate(\Traversable $iterator)
{
    $array = [];

    foreach ($iterator as $k => $v) {
        $array[$k] = $v;
    }

    return $array;
}

我还有一些其他的hackish想法,但我真正想要的是一个不需要任何额外代码,文件或库的功能。没什么好看的。

1 个答案:

答案 0 :(得分:2)

使用iterator_to_array

  

iterator_to_array

     

(PHP 5&gt; = 5.1.0)

     

iterator_to_array - 将迭代器复制到数组

     

<强>描述

     

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