从入门到精通:gh_mirrors/coll/collection的20个实用操作示例
从入门到精通:gh_mirrors/coll/collection的20个实用操作示例
gh_mirrors/coll/collection是一个内存友好、简单易用、延迟加载且模块化的集合类,为PHP开发者提供了丰富的数据处理功能。本文将通过20个实用操作示例,帮助你快速掌握这个强大工具的核心用法,提升数据处理效率。
一、基础操作:构建与初始化集合
1. 创建基础集合
使用fromIterable()方法可以轻松将数组转换为集合对象:
$collection = Collection::fromIterable([1, 2, 3, 4, 5]);
该方法支持所有可迭代类型,包括数组和对象,是集合初始化的最常用方式。
2. 从文件创建集合
通过fromFile()方法直接读取文件内容并创建集合:
$lines = Collection::fromFile('data.txt');
这种方式特别适合处理日志文件或数据导出文件,相关实现可参考docs/pages/code/read-file.php。
二、筛选与转换:数据清洗必备
3. 过滤数据(filter)
使用filter()方法根据条件筛选元素,支持多个回调函数组合:
// 筛选3的倍数
$filtered = Collection::fromIterable([1,2,3,4,5,6,7,8,9,10])
->filter($divisibleBy3); // [3, 6, 9]
也可以链式调用多个筛选条件,实现更复杂的过滤逻辑:
// 筛选2或3的倍数
$filtered = Collection::fromIterable([1,2,3,4,5,6,7,8,9,10])
->filter($divisibleBy2, $divisibleBy3); // [2, 3, 4, 6, 8, 9, 10]
详细用法可查看docs/pages/code/operations/filter.php。
4. 转换数据(map)
map()方法用于对集合中的每个元素进行转换处理:
// 将数字转换为其平方值
$squares = Collection::fromIterable([1,2,3,4,5])
->map(static fn($value): float => $value ** 2);
该方法保留原始键名,支持链式调用实现多步转换,如docs/pages/code/simple.php中的示例。
三、聚合与统计:数据分析工具
5. 计算总和(sum)
通过sum()方法快速计算数值集合的总和:
$total = Collection::fromIterable([1,2,3,4,5])->sum(); // 15
6. 求平均值(average)
使用average()方法计算集合元素的平均值:
$avg = Collection::fromIterable([1,2,3,4,5])->average(); // 3
相关接口定义可查看src/Contract/Operation/Averagesable.php。
四、高级操作:提升开发效率
7. 分组数据(groupBy)
groupBy()方法可根据指定条件对集合元素进行分组:
$grouped = Collection::fromIterable($users)
->groupBy(static fn($user) => $user->department);
8. 链式操作组合
将多个操作方法链式调用,实现复杂数据处理流程:
$result = Collection::fromIterable($data)
->filter($isValid)
->map($transform)
->groupBy($category)
->sort($sortOrder);
这种模块化设计使代码更具可读性和维护性,核心实现位于src/Collection.php。
五、实用场景示例
9. FizzBuzz问题解决方案
利用集合操作简化经典的FizzBuzz问题:
Collection::range(1, 100)
->map(static fn(int $value): string =>
sprintf("%s%s",
$value % 3 === 0 ? 'Fizz' : '',
$value % 5 === 0 ? 'Buzz' : ''
) ?: $value
)->each(static fn(string $item) => echo $item . "\n");
完整示例可参考docs/pages/code/fizzbuzz.php。
10. 文本分析处理
对文本内容进行分词、过滤和统计:
$words = Collection::fromString(file_get_contents('article.txt'))
->split('/\s+/')
->filter(static fn($item): bool => (bool) preg_match('/^[a-zA-Z]+$/', $item))
->map(static fn(string $letter): string => mb_strtolower($letter))
->frequency();
该示例展示了文本处理的完整流程,代码位于docs/pages/code/text-analysis.php。
六、性能优化技巧
11. 延迟加载操作
利用集合的延迟加载特性提升大数据处理性能:
$largeDataset = Collection::fromGenerator(function () {
foreach (range(1, 1000000) as $i) {
yield $i;
}
})->filter($complexCondition)->map($transformation);
只有在实际访问元素时才会执行过滤和转换操作,有效减少内存占用。
12. 使用缓存提高效率
通过cache()方法缓存计算结果,避免重复处理:
$expensiveResult = $collection
->cache('unique-key')
->map($expensiveCalculation);
缓存实现可查看src/Operation/Cache.php。
七、扩展与定制
13. 创建自定义集合
通过继承CollectionDecorator实现自定义集合类:
class MyCollection extends CollectionDecorator {
public function customOperation() {
return $this->innerCollection->filter(...)->map(...);
}
}
详细示例见docs/pages/code/extending-collection.php。
14. 添加自定义操作
实现Operation接口创建自定义操作:
class MyOperation implements Operation {
public function __invoke(iterable $iterable): iterable {
foreach ($iterable as $item) {
yield $this->process($item);
}
}
}
操作接口定义在src/Contract/Operation.php。
八、测试与验证
15. 单元测试示例
项目提供了全面的单元测试,如tests/unit/CollectionSpecificOperationTest.php所示:
public function testFilter() {
$collection = Collection::fromIterable([1,2,3,4,5]);
$result = $collection->filter(static fn($i) => $i % 2 === 0);
$this->assertEquals([2,4], $result->toArray());
}
16. 静态分析验证
通过静态分析确保代码质量,配置文件位于phpstan.neon.dist和psalm.xml。
九、更多实用操作
17. 合并集合(merge)
$combined = $collection1->merge($collection2);
18. 去重操作(distinct)
$unique = $collection->distinct();
19. 排序操作(sort)
$sorted = $collection->sort();
20. 折叠操作(reduce)
$total = $collection->reduce(static fn($carry, $item) => $carry + $item, 0);
结语
gh_mirrors/coll/collection提供了丰富的集合操作方法,通过本文介绍的20个实用示例,你可以快速掌握其核心功能和使用技巧。无论是简单的数据筛选转换,还是复杂的数据分析处理,这个模块化的集合类都能帮助你编写更简洁、高效的PHP代码。
要开始使用,只需通过Composer安装,然后参考docs/installation.rst进行配置。更多高级用法和操作示例,可查阅项目完整文档和测试用例。
更多推荐



所有评论(0)