PHP懒惰数组映射

Eze*_*iel 15 php spl

有没有办法做array_map但作为迭代器?

例如:

foreach (new MapIterator($array, $function) as $value)
{
   if ($value == $required)
      break;
}
Run Code Online (Sandbox Code Playgroud)

这样做的原因是$ function很难计算,而$ array有太多的元素,只需要映射直到我找到一个特定的值.array_map将在我搜索我想要的值之前计算所有值.

我自己可以实现迭代器,但我想知道是否有本地方法来做到这一点.我找不到任何搜索PHP文档的东西.

ezz*_*ron 6

简而言之:不.

PHP中没有内置的延迟迭代器映射.有一个非惰性函数iterator_apply(),但没有你喜欢的那样.

正如你所说,你可以自己写一个.我建议你扩展IteratorIterator并简单地覆盖current()方法.

如果有这样的事情,它将被记录在这里这里.


Jer*_*auw 5

这是一个懒惰的集合映射函数,它可以为您提供Iterator:

/**
 * @param array|Iterator $collection
 * @param callable $function
 * @return Iterator
 */
function collection_map( $collection, callable $function ) {
    foreach( $collection as $element ) {
        yield $function( $element );
    }
}
Run Code Online (Sandbox Code Playgroud)