code-distortion/laravel-collection-macros
Composer 安装命令:
composer require code-distortion/laravel-collection-macros
包简介
A set of useful Laravel collection macros - a spatie/laravel-collection-macros fork
README 文档
README
This package is a fork of spatie/laravel-collection-macros. It contains a subset of the original macros as well as a few extra ones.
This package is intended for PERSONAL USE. Please see the original Spatie package if you would like to submit a PR or request a feature.
Installation
Install the package via composer:
composer require code-distortion/laravel-collection-macros
The package will automatically register itself.
Macros
Macros kept from the original spatie package:
New macros added:
catch
See Try
extract
Extract keys from a collection. This is very similar to only, with two key differences:
extractreturns an array of values, not an associative array- If a value doesn't exist, it will fill the value with
nullinstead of omitting it
extract is useful when using PHP 7.1 short list() syntax.
[$name, $role] = collect($user)->extract('name', 'role.name');
glob
Returns a collection of a glob() result.
Collection::glob('config/*.php');
ifAny
Executes the passed callable if the collection isn't empty. The entire collection will be returned.
collect()->ifAny(function(Collection $collection) { // empty collection so this won't get called echo 'Hello'; }); collect([1, 2, 3])->ifAny(function(Collection $collection) { // non-empty collection so this will get called echo 'Hello'; });
ifEmpty
Executes the passed callable if the collection is empty. The entire collection will be returned.
collect()->ifEmpty(function(Collection $collection) { // empty collection so this will called echo 'Hello'; }); collect([1, 2, 3])->ifEmpty(function(Collection $collection) { // non-empty collection so this won't get called echo 'Hello'; });
keepValues
Returns a collection containing only values that were in the given list.
collect(['foo', 'bar'])->keepValues(['foo'])->toArray(); // ['foo']
keepValues accepts a second parameter to turn strict-comparisons on (default false).
collect(['123', 456])->keepValues(['123', '456'], true)->toArray(); // ['123']
keyedKeys
Returns a collection where the values are the same as the keys.
collect(['foo' => 1, 'bar' => 2])->keyedKeys()->toArray(); // ['foo' => 'foo', 'bar' => 'bar']
none
Checks whether a collection doesn't contain any occurrences of a given item, key-value pair, or passing truth test. The function accepts the same parameters as the contains collection method.
collect(['foo'])->none('bar'); // returns true collect(['foo'])->none('foo'); // returns false collect([['name' => 'foo']])->none('name', 'bar'); // returns true collect([['name' => 'foo']])->none('name', 'foo'); // returns false collect(['name' => 'foo'])->none(function ($key, $value) { return $key === 'name' && $value === 'bar'; }); // returns true
paginate
Create a LengthAwarePaginator instance for the items in the collection.
collect($posts)->paginate(5);
This paginates the contents of $posts with 5 items per page. paginate accepts quite some options, head over to the Laravel docs for an in-depth guide.
paginate(int $perPage = 15, string $pageName = 'page', int $page = null, int $total = null, array $options = [])
prioritize
Move elements to the start of the collection.
$collection = collect([ ['id' => 1], ['id' => 2], ['id' => 3], ]); $collection ->prioritize(function(array $item) { return $item['id'] === 2; }) ->pluck('id') ->toArray(); // returns [2, 1, 3]
rejectValues
Removes the given values from the collection.
collect(['foo', 'bar'])->rejectValues(['foo'])->toArray(); // ['bar']
rejectValues accepts a second parameter to turn strict-comparisons on (default false).
collect(['123', 456])->rejectValues(['123', '456'], true)->toArray(); // [456]
simplePaginate
Create a Paginator instance for the items in the collection.
collect($posts)->simplePaginate(5);
This paginates the contents of $posts with 5 items per page. simplePaginate accepts quite some options, head over to the Laravel docs for an in-depth guide.
simplePaginate(int $perPage = 15, string $pageName = 'page', int $page = null, int $total = null, array $options = [])
For a in-depth guide on pagination, check out the Laravel docs.
try
If any of the methods between try and catch throw an exception, then the exception can be handled in catch.
collect(['a', 'b', 'c', 1, 2, 3]) ->try() ->map(fn ($letter) => strtoupper($letter)) ->each(function() { throw new Exception('Explosions in the sky'); }) ->catch(function (Exception $exception) { // handle exception here }) ->map(function() { // further operations can be done, if the exception wasn't rethrow in the `catch` });
While the methods are named try/catch for familiarity with PHP, the collection itself behaves more like a database transaction. So when an exception is thrown, the original collection (before the try) is returned.
You may gain access to the collection within catch by adding a second parameter to your handler. You may also manipulate the collection within catch by returning a value.
$collection = collect(['a', 'b', 'c', 1, 2, 3]) ->try() ->map(function ($item) { throw new Exception(); }) ->catch(function (Exception $exception, $collection) { return collect(['d', 'e', 'f']); }) ->map(function ($item) { return strtoupper($item); }); // ['D', 'E', 'F']
transpose
The goal of transpose is to rotate a multidimensional array, turning the rows into columns and the columns into rows.
collect([ ['Jane', 'Bob', 'Mary'], ['jane@example.com', 'bob@example.com', 'mary@example.com'], ['Doctor', 'Plumber', 'Dentist'], ])->transpose()->toArray(); // [ // ['Jane', 'jane@example.com', 'Doctor'], // ['Bob', 'bob@example.com', 'Plumber'], // ['Mary', 'mary@example.com', 'Dentist'], // ]
validate
Returns true if the given $callback returns true for every item. If $callback is a string or an array, regard it as a validation rule.
collect(['foo', 'foo'])->validate(function ($item) { return $item === 'foo'; }); // returns true collect(['sebastian@spatie.be', 'bla'])->validate('email'); // returns false collect(['sebastian@spatie.be', 'freek@spatie.be'])->validate('email'); // returns true
Changelog
Please see CHANGELOG for more information what has changed recently.
Testing
$ composer test
Contributing
Contributions are not being sought for this package. Please see the original spatie/laravel-collection-macros package if you would like to contribute.
Security
If you discover any security related issues, please email tim@code-distortion.net instead of using the issue tracker.
Credits
License
The MIT License (MIT). Please see License File for more information.
code-distortion/laravel-collection-macros 适用场景与选型建议
code-distortion/laravel-collection-macros 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 14 次下载、GitHub Stars 达 0, 最近一次更新时间为 2020 年 11 月 08 日, 在 PHP 生态内属于活跃度较高的组件。
它主要适用于以下技术方向: 「spatie」 「laravel-collection-macros」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。
我们在过去多个企业项目中使用过 code-distortion/laravel-collection-macros 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 code-distortion/laravel-collection-macros 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
与 code-distortion/laravel-collection-macros 相关的其它包
同方向 / 同关键字的高下载量 PHP Composer 包推荐,方便对比选型:
A set of useful Laravel collection macros
Different paginate macros for laravel eloquent builder and collection
Receive webhooks in Laravel apps
A set of useful Laravel collection macros
Easily optimize images using PHP
Store your application settings
统计信息
- 总下载量: 14
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 0
- 点击次数: 8
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2020-11-08