anon767/phpstream

dev-master 2018-02-01 20:44 UTC

This package is not auto-updated.

Last update: 2024-09-29 05:08:11 UTC


README

这个库基于Java的Stream-Api和JavaScript的Array-Prototype

(https://docs.oracle.com/javase/8/docs/api/?java/util/stream/Stream.html)

(https://mdn.org.cn/de/docs/Web/JavaScript/Reference/Global_Objects/Array/map)

如果你喜欢函数式模式、易于阅读的代码或不可变的数据类型,并且希望在PHP中找到这些,那么你绝对应该尝试一下。

依赖项

  1. PHP >= 5
  2. PHPUnit用于开发

安装

执行 composer require anon767/phpstream

或者在composer.json中添加以下内容

"require": {
    "anon767/phpstream": "*"
  }

用法

返回数组中单个元素的Stream方法将它们包装在Cells中(比较Java optional)。

可以通过 $cell->unwrap()$cell->orElse($default) 访问这些值。

如果Cell内部是null值,则解包时会抛出"NoElementException"异常

您可以将任何传统数组转换为Stream,如下所示。

use Stream/Stream;
$array = [1,2,3,4,5,6,7,8,9,10];
$stream = new Stream($array);

或者这样

use Stream/Stream;
$array = [1,2,3,4,5,6,7,8,9,10];
$stream = Stream::asStream($array);

实现了Java Stream Api中的大多数函数。

示例

从数组中获取第一个偶数

$array = [1,2,3,4,5,6,7,8,9,10];
$onlyEvenNumbers = Stream::asStream($array)->filter(function($v){return $v%2==0;});
$firstEvenNumber = $onlyEvenNumbers->first()->unwrap();

或者一行内

$firstEvenNumber = Stream::asStream([1,2,3,4,5,6,7,8,9,10])->filter(function($v){return $v%2==0;})->first()->unwrap();

将数组中的所有数字平方

$array = [1,2,3,4,5,6,7,8,9,10];
$squares = Stream::asStream($array)->map(function($v){return $v*$v;});

打印数组中的所有数字

$array = [1,2,3,4,5,6,7,8,9,10];
Stream::asStream($array)->forEach(function($v){echo $v;});

ArrayList

ArrayList类扩展了ArrayObject,因此可以使用与正常PHP数组相同的方式使用。尽管它可以直接转换为Stream

$a = new ArrayList();
$a[] = 1;
$a[] = 2;
$a[] = 3;
echo $a->toStream()->first()->orElse(null); // prints 1

许可协议

MIT