jopic/php-streams

用于流式处理数组/列表内容的库

1.0.3 2015-12-06 19:04 UTC

This package is auto-updated.

Last update: 2024-09-15 21:51:32 UTC


README

Build Status

PHP数组内容流式处理的库。

要求

  • PHP版本 >= 5.3

安装

添加以下composer依赖项:"jopic/php-streams": "1.0.3"

使用方法

初始化

该库区分列表(具有数字索引的数组)和其他数组。因此有两种初始化方式

  • $stream = Stream::ofList(array(1, 2, 3)); 用于列表
  • $arrayStream = Stream::ofArray(array("key1" => "value1"")); 用于具有不同键类型的数组

限制

此方法允许您定义用于结果函数(eachtoArraycollect)的最大记录数

Stream::ofList(array(1, 2, 3))
    ->limit(1) // limits the stream to the first element

跳过

此方法允许您定义要跳过的匹配元素的数量

Stream::ofList(array(1, 2, 3))
    ->skip(1) // the resulting elements are (2, 3)

步长(仅适用于ListStream)

此方法允许您定义for循环的步长函数

Stream::ofList(array(1, 2, 3, 4, 5))
    ->step(function($i) { return $i + 2; }); // will iterate over the following elements (1, 3, 5)

筛选

此方法允许您在流元素上应用筛选方法

Stream::ofList(array(1, 2, 3, 4, 5))
    ->filter(function($item) { return $item % 2 == 0; }); // will filter the elements (2, 4)

映射

此方法允许您在流元素上应用映射函数

Stream::ofList(array(1, 2, 3))
    ->map(function($item) { return $item + 1; })
    ->toArray(); // will return the array(2, 3, 4)

重置

此方法重置使用limitskipstepfilter所做的所有操作

Stream::ofList(array(1, 2, 3, 4, 5))
    ->filter(function($item) { return $item % 2 == 0; }) // matching elements (2, 4)
    ->reset(); // matching elements (1, 2, 3, 4, 5)

each

此方法遍历所有匹配元素,并对每个元素执行给定的函数

Stream::ofList(array(1, 2, 3, 4, 5))
    ->each(function($item) { echo $item; }); // will print all items

重要:ArrayStream的each实现以两个参数keyvalue调用

toArray

此方法将所有匹配元素收集到PHP数组中

Stream::ofList(array(1, 2, 3, 4, 5))
    ->skip(2)
    ->limit(2)
    ->toArray(); // will return array(3, 4)

collect(仅适用于ListStream)

此方法将所有匹配元素收集到由给定分隔符分隔的字符串中

Stream::ofList(array(1, 2, 3))
    ->collect(','); // will return "1,2,3"

sum

此方法对所有匹配元素进行求和。当数组中的所有值都是相同的数值数据类型或定义了map函数时,此功能可用。

Stream::ofList(array(1, 2, 3))
    ->sum(); // will return 6

min

此方法返回所有匹配元素的最小值。当数组中的所有值都是相同的数值数据类型或定义了map函数时,此功能可用。

Stream::ofList(array(1, 2, 3))
    ->min(); // will return 1

max

此方法返回所有匹配元素的最大值。当数组中的所有值都是相同的数值数据类型或定义了map函数时,此功能可用。

Stream::ofList(array(1, 2, 3))
    ->max(); // will return 3

avg

此方法返回所有匹配元素的平均值。当数组中的所有值都是相同的数值数据类型或定义了map函数时,此功能可用。

Stream::ofList(array(1, 2, 3, 4))
    ->avg(); // will return 2.5

示例

跳过第一个元素,筛选奇数值,将结果限制为3,并将匹配元素收集到连接字符串中的示例

Stream::ofList(array(1, 2, 3, 4, 5, 6))
    ->skip(1)
    ->filter(function($item) {
        return $item % 2 == 1;
    })
    ->limit(3)
    ->collect(', ') // will return "3, 5"

关联数组示例(筛选键是数字,并返回作为数组的匹配元素)

Stream::ofArray(array(
        "key1" => "value1",
        "key2" => 2,
        "key3" => 3,
        4 => "value 4"
    ))
    ->filter(function($key, $value) {
        return is_numeric($key);
    })
    ->toArray(); // will return array(4 => "value 4")

问题或改进

如果您发现任何问题或对改进库有想法,请勿犹豫,在github项目上提出问题。

版权 & 许可证

版权 2015 Johannes Pichler

根据Apache License,版本2.0(“许可证”);除非根据适用法律或书面同意,否则不得使用此文件,除非符合许可证。您可以在以下位置获得许可证副本:

https://apache.ac.cn/licenses/LICENSE-2.0

除非适用法律要求或书面同意,否则在许可证下分发的软件按“原样”分发,不提供任何明示或暗示的保证或条件。有关许可证的具体语言管辖权限和限制,请参阅许可证。