chh / itertools
迭代器的常用功能操作。
Requires
- php: >=5.3.3
- ext-spl: *
Requires (Dev)
- chh/bob: *@dev
- phpunit/phpunit: ~3.7
This package is not auto-updated.
Last update: 2024-09-14 13:20:08 UTC
README
itertools
旨在将 PHP 迭代器的操作支持提升到与数组相同的水平。
安装
通过 composer 安装
% wget https://getcomposer.org.cn/composer.phar
% php composer.phar require chh/itertools:~1.0
使用方法
itertools
通过一系列函数提供了一组操作。大多数函数通过将迭代器包装在另一个迭代器中来操作。这意味着大多数操作都是惰性评估的,除非这样做没有意义。
这使得这些函数成为过滤或映射
- Symfony Finder 实例的效率解决方案
- 对象
PDOStatement
或Mysqli_Result
(自 5.4.0 版本起)。 - 实现
\Traversable
的 ORM 数据集/集合。
\Traversable itertools\slice(\Traversable $traversable, $start, [$count = -1])
将可遍历的包装在一个迭代器中,从给定的偏移量 $start
开始迭代,并在产生 $count
个元素后停止。默认情况下,它遍历包装的可遍历对象直到末尾。
示例
<?php use itertools; $users = new ArrayIterator(['John', 'Jim', 'Joe']); foreach (itertools\slice($users, 1) as $user) { echo "$user\n"; } # Output: # Jim # Joe
\Traversable itertools\map(callable $callback, \Traversable $traversable...)
返回一个迭代器,当调用回调函数时,为每个可遍历的当前元素产生回调函数的返回值。回调函数接收所有迭代器的当前元素,按 itertools\map()
传递的顺序。
示例
<?php use itertools; $a = new ArrayIterator(['one', 'two', 'three']); $b = new ArrayIterator([1, 2, 3]); $tuples = itertools\map( function($word, $number) { return [$word, $number]; }, $a, $b ); foreach ($tuples as $t) { var_export($t); } # ['one', 1] # ['two', 2] # ['three', 3]
\Traversable itertools\filter(\Traversable $traversable, [callable $callback])
基于回调函数的返回值删除所有元素,或者当省略回调函数时删除所有非“真”值。类似于 array_filter()
。
<?php use itertools; $a = new ArrayIterator(range(1, 10)); var_export(iterator_to_array( itertools\filter($a, function($value) { return $value >= 7; }) )); # Output: # [7, 8, 9]
\Traversable itertools\flip(\Traversable $traversable)
返回一个迭代器,产生内部迭代器的键,并在 key()
中产生值。类似于 array_flip()
。非标量值不是有效的 PHP 数组键,因此请确保它们至少是可序列化为字符串的。
\Traversable itertools\xrange($start, $end, [$step = 1])
返回一个迭代器,产生从 $start
到包含 $end
的给定范围内的所有数字,并在每次迭代后增加给定的 $step
。
当需要遍历一个很大的范围(这里的大指的是几百万)时,这个迭代器非常有用,因为它更节省内存。这是因为不需要将所有可能的数字存储在数组中。
void itertools\walk(\Iterator $iterator, callable $callback)
对迭代器的每个元素调用回调函数。与 iterator_apply()
不同,忽略回调函数的返回值。
\Traversable itertools\to_iterator($value)
将任何值转换为有效的迭代器。
- 迭代器直接传递。
- 仅实现
\Traversable
的对象被包装在\IteratorIterator
中(例如PDOStatement
)。 - 数组被包装在
ArrayIterator
中。 - 其他所有内容都被转换为
array
,然后包装在\ArrayIterator
中。
许可证
版权所有 (c) 2014 Christoph Hochstrasser christoph.hochstrasser@gmail.com
特此授予任何人获得此软件及其相关文档文件(“软件”)副本的权利,免费使用软件,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或出售软件副本,并允许向提供软件的人提供使用本软件的权利,但需遵守以下条件
上述版权声明和本许可声明应包含在软件的所有副本或主要部分中。
本软件按“原样”提供,不提供任何形式的质量保证,无论是明示的还是暗示的,包括但不限于适用性、特定目的的适用性和非侵权性保证。在任何情况下,作者或版权所有者均不对任何索赔、损害或其他责任承担责任,无论是在合同行为、侵权行为或其他情况下,无论该索赔、损害或其他责任是否源于、由或与该软件或对该软件的使用或其他方式有关。