分享 10 个有用的 Laravel 5.8 集合辅助方法

Laravel

在 Laravel 中,有一个操作数组的非常好用的类,叫做集合。相信每个 Laravel 的开发者都或多或少用过集合,尤其是在操作的 Eloquent 的时候。在这篇文章中,我会列出 10 个常用的方法。

1. 去重

duplicates 方法可以检索出集合中所有重复的值。返回的数组中会包含每个值在原数组中的键。

<?php
$collection = collect(['james', 'lisa', 'ryan', 'james', 'brad', 'lisa']);
$collection->duplicates(); // [3 => 'james', 5 => 'lisa']

2. 遍历集合

在不使用  foreach 的情况下也可以遍历集合,就是使用 each 方法。像通常的 foreach 方法一样, each 方法也有两个参数,分别是 itemkey

<?php
$collection->each(function ($item, $key) {
    // Do stuff
});

3. 调试输出集合

当我们在调试代码的时候,经常需要输出查看集合的内容。除了使用 dump($collection) 外,还可以使用集合的 dump 方法,使用 dump 方法的好处是,输出的内容看起来更加整洁清爽。

<?php
$collection = collect(['james', 'lisa', 'ryan']);
$collection->dump(); 
/*
Collection {
  #items: array:3 [
    0 => "james"
    1 => "lisa"
    2 => "ryan"
  ]
}
*/

如果你想要在输出集合内容,并且打断点,可以使用 dd(输出并终止)方法。

4. Has

has 方法可以用来查看某个键是否存在于集合中。参数可以是字符串,也可以是数组。如果传了数组作为参数,那么数组中所有的值都必须是集合中的键,结果才能返回 true,否则返回 false。

<?php
$collection = collect([
  'title' => 'Harry Potter', 
  'author' => 'J.K. Rowling', 
  'price' => 25
  ]);
$collection->has('author'); // true
$collection->has(['title', 'price']); // true
$collection->has(['price', 'rating']); // false

5. Implode

implode 方法可以连接集合中的值。这个方法的作用跟 PHP 中的 implode 方法非常像。

<?php

$collection = collect([
    ['title' => 'Gift card', 'price' => 50],
    ['title' => 'Chair', 'price' => 80],
]);
$collection->implode('title', ', ');
// Gift card, Chair

如果集合中的值只是字符串,或数字,你只需要传递连接符作为参数即可。

<?php

$collection = collect([1,2,'foo',3,'bar']);
$collection->implode('-');
// 1-2-foo-3-bar

6. Push 与 Pull

可以使用 push 方法将项目附加到集合的末尾。如果需要添加到集合的开头,则可以使用 prepend 方法。

<?php

$collection = collect([1, 2, 3]);
$collection->push(4);
$collection->all(); // [1, 2, 3, 4]

pull 方法将给定键从集合中移除并将返回其对应的值。

<?php

$collection = collect([
    'title' => 'Harry Potter',
    'author' => 'J.K. Rowling',
    'price' => 25
]);
$collection->pull('author'); // 'J.K. Rowling'
$collection->all(); // ['title' => 'Harry Potter', 'price' => 25]

7. Shuffle 方法

shuffle 方法将会随机排序集合中的项目。

<?php

$collection = collect([1, 2, 3]);
$shuffled = $collection->shuffle();
$shuffled->all(); // [3, 1, 2] (random example)

8. Max 方法

您可以使用 max 方法获取集合中的最大值。如果集合中包含数组,则可以传递参数以获取某个键的最大值。

<?php

$max = collect([
    ['title' => 'Gift card', 'price' => 50],
    ['title' => 'Chair', 'price' => 80]
])->max('price'); // 80
$max = collect([1, 2, 3])->max(); // 3

9. Filter

可以使用 filter 方法来过滤集合。这个方法接受一个回调函数作为参数。在回调函数里定义过滤的规则,只有符合规则的值才能被留在集合中。

<?php

$collection = collect([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]);
$even_numbers = $collection->filter(function ($value, $key) {
    return $value % 2 == 0;
});
$even_numbers->all(); // [2, 4, 6, 8, 10]

10. Slice

slice 方法可以用来分割集合,返回参数指定的索引位置及其之后的值,返回值的数组中会包含原数组的键。

注意,在下面的例子中,传递的参数是 2。意思是从索引 2 开始分割集合,而 不是 数组中的元素值 2。

<?php

$collection = collect([1, 2, 3, 4, 5]);
$sliced = $collection->slice(2);
$sliced->all(); // [3, 4, 5]
本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。

原文地址:https://medium.com/swlh/10-helpful-metho...

译文地址:https://learnku.com/laravel/t/32626

本帖已被设为精华帖!
本文为协同翻译文章,如您发现瑕疵请点击「改进」按钮提交优化建议
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
讨论数量: 5
德国科隆街头的大胡子

哈哈 我之前虽然一直在用集合 但是我并不知道这样是集合 现在终于知道原来这个是集合 哈哈

4年前 评论

部分场景,实测后 each没有foreach和array_walk()效率高

3年前 评论

@xyz60429 那肯定是比不上原生的速度快呀。

2年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!