集合

介绍

October\Rain\Support\Collection类为处理数据数组提供了一个流畅,方便的包装器。 例如,请查看以下代码。 我们将从数组中创建一个新的集合实例,在每个元素上运行strtoupper函数,然后删除所有空元素:

  1. $collection = new October\Rain\Support\Collection(['stewie', 'brian', null]);
  2. $collection = $collection
  3. ->map(function ($name) {
  4. return strtoupper($name);
  5. })
  6. ->reject(function ($name) {
  7. return empty($name);
  8. })
  9. ;

Collection类允许您链式调用方法以执行流畅的映射和减少底层数组。 通常,每个Collection方法都返回一个全新的Collection实例。

创建集合

如上所述,将数组传递给October\Rain\Support\Collection类的构造函数将返回给定数组的新实例。 因此,创建集合非常简单:

  1. $collection = new October\Rain\Support\Collection([1, 2, 3]);

默认情况下,数据库模型的集合总是作为Collection实例返回; 但是,您可以随意使用Collection类,方便您的应用。

可用方法

对于本文档的其余部分,我们将讨论Collection类中可用的每个方法。 请记住,所有这些方法都可以链式调用,以便流畅地操作底层数组。 此外,几乎每个方法都返回一个新的Collection实例,允许您在必要时保留集合的原始副本。

您可以从此表中选择任何方法以查看其用法示例:

all ,chunk ,collapse ,contains ,count ,diff ,each ,filter ,first ,flatten ,flip ,forget ,forPage ,get ,groupBy ,has ,implode ,intersect ,isEmpty ,keyBy ,keys ,last ,map ,merge ,pluck ,pop ,prepend ,pull ,push ,put ,random ,reduce ,reject ,reverse ,search ,shift ,shuffle ,slice ,sort ,sortBy ,sortByDesc ,splice ,sum ,take ,toArray ,toJson ,transform ,unique ,values ,where ,whereLoose ,zip

方法列表

all()

all方法只返回集合表示的底层数组:

  1. $collection = new Collection([1, 2, 3]);
  2. $collection->all();
  3. //[1, 2, 3]

chunk()

chunk方法将集合分成多个给定大小的较小集合:

  1. $collection = new Collection([1, 2, 3, 4, 5, 6, 7]);
  2. $chunks = $collection->chunk(4);
  3. $chunks->toArray();
  4. //[[1, 2, 3, 4], [5, 6, 7]]

在使用网格系统时,此方法在CMS页面中特别有用,例如Bootstrap。 想象一下,您有一组要在网格中显示的模型:

  1. {% for chunk in products.chunk(3) %}
  2. <div class="row">
  3. {% for product in chunk %}
  4. <div class="col-xs-4">{{ product.name }}</div>
  5. {% endfor %}
  6. </div>
  7. {% endfor %}

collapse()

collapse方法将一组数组折叠成一个扁平集合:

  1. $collection = new Collection([[1, 2, 3], [4, 5, 6], [7, 8, 9]]);
  2. $collapsed = $collection->collapse();
  3. $collapsed->all();
  4. //[1, 2, 3, 4, 5, 6, 7, 8, 9]

contains()

contains方法确定集合是否包含给定项:

  1. $collection = new Collection(['name' => 'Desk', 'price' => 100]);
  2. $collection->contains('Desk');
  3. //true
  4. $collection->contains('New York');
  5. //false

您还可以将键/值对传递给contains方法,该方法将确定集合中是否存在给定的对:

  1. $collection = new Collection([
  2. ['product' => 'Desk', 'price' => 200],
  3. ['product' => 'Chair', 'price' => 100],
  4. ]);
  5. $collection->contains('product', 'Bookcase');
  6. //false

最后,您还可以将回调传递给contains方法来执行您自己的真值测试:

  1. $collection = new Collection([1, 2, 3, 4, 5]);
  2. $collection->contains(function ($key, $value) {
  3. return $value > 5;
  4. });
  5. //false

count()

count方法返回集合中的项目总数:

  1. $collection = new Collection([1, 2, 3, 4]);
  2. $collection->count();
  3. //4

diff()

diff方法将集合与另一个集合或普通的PHP`数组进行比较:

  1. $collection = new Collection([1, 2, 3, 4, 5]);
  2. $diff = $collection->diff([2, 4, 6, 8]);
  3. $diff->all();
  4. //[1, 3, 5]

each()

each方法迭代集合中的项目并将每个项目传递给给定的回调:

  1. $collection = $collection->each(function ($item, $key) {
  2. //
  3. });

从你的回调中返回false以打破循环:

  1. $collection = $collection->each(function ($item, $key) {
  2. if (/* some condition */) {
  3. return false;
  4. }
  5. });

every()

every方法创建一个由第n个元素组成的新集合:

  1. $collection = new Collection(['a', 'b', 'c', 'd', 'e', 'f']);
  2. $collection->every(4);
  3. //['a', 'e']

您可以选择将offset作为第二个参数传递:

  1. $collection->every(4, 1);
  2. //['b', 'f']

filter()

filter方法按给定的回调过滤集合,只保留那些通过给定真值测试的项:

  1. $collection = new Collection([1, 2, 3, 4]);
  2. $filtered = $collection->filter(function ($item) {
  3. return $item > 2;
  4. });
  5. $filtered->all();
  6. //[3, 4]

对于“filter”的反转,请参见reject方法。

first()

first方法返回集合中传递给定真值测试的第一个元素:

  1. new Collection([1, 2, 3, 4])->first(function ($key, $value) {
  2. return $value > 2;
  3. });
  4. //3

您也可以调用没有参数的first方法来获取集合中的第一个元素。 如果集合为空,则返回“null”:

  1. new Collection([1, 2, 3, 4])->first();
  2. //1

flatten()

flatten方法将多维集合展平为单个维度:

  1. $collection = new Collection(['name' => 'peter', 'languages' => ['php', 'javascript']]);
  2. $flattened = $collection->flatten();
  3. $flattened->all();
  4. //['peter', 'php', 'javascript'];

flip()

flip方法用它们对应的值交换集合的键:

  1. $collection = new Collection(['name' => 'peter', 'platform' => 'october']);
  2. $flipped = $collection->flip();
  3. $flipped->all();
  4. //['peter' => 'name', 'october' => 'platform']

forget()

forget方法通过其键从集合中删除一个项:

  1. $collection = new Collection(['name' => 'peter', 'platform' => 'october']);
  2. $collection->forget('name');
  3. $collection->all();
  4. //['platform' => 'october']

注意: 与大多数其他集合方法不同,forget不会返回新的修改集合; 它修改了他调用的原集合。

forPage()

forPage方法返回一个新集合,其中包含将在给定页码上出现的项:

  1. $collection = new Collection([1, 2, 3, 4, 5, 6, 7, 8, 9])->forPage(2, 3);
  2. $collection->all();
  3. //[4, 5, 6]

该方法分别需要页面编号和每页显示的项目数。

get()

get方法返回给定键的项。 如果密钥不存在,则返回“null”:

  1. $collection = new Collection(['name' => 'peter', 'platform' => 'october']);
  2. $value = $collection->get('name');
  3. //peter

您可以选择传递默认值作为第二个参数:

  1. $collection = new Collection(['name' => 'peter', 'platform' => 'october']);
  2. $value = $collection->get('foo', 'default-value');
  3. //default-value

您甚至可以将回调作为默认值传递。 如果指定的键不存在,将返回回调的结果:

  1. $collection->get('email', function () {
  2. return 'default-value';
  3. });
  4. //default-value

groupBy()

groupBy方法按给定键对集合的项进行分组:

  1. $collection = new Collection([
  2. ['account_id' => 'account-x10', 'product' => 'Bookcase'],
  3. ['account_id' => 'account-x10', 'product' => 'Chair'],
  4. ['account_id' => 'account-x11', 'product' => 'Desk'],
  5. ]);
  6. $grouped = $collection->groupBy('account_id');
  7. $grouped->toArray();
  8. /*
  9. [
  10. 'account-x10' => [
  11. ['account_id' => 'account-x10', 'product' => 'Bookcase'],
  12. ['account_id' => 'account-x10', 'product' => 'Chair'],
  13. ],
  14. 'account-x11' => [
  15. ['account_id' => 'account-x11', 'product' => 'Desk'],
  16. ],
  17. ]
  18. */

除了传递字符串key之外,您还可以传递回调。 回调应返回您希望键入组的值:

  1. $grouped = $collection->groupBy(function ($item, $key) {
  2. return substr($item['account_id'], -3);
  3. });
  4. $grouped->toArray();
  5. /*
  6. [
  7. 'x10' => [
  8. ['account_id' => 'account-x10', 'product' => 'Bookcase'],
  9. ['account_id' => 'account-x10', 'product' => 'Chair'],
  10. ],
  11. 'x11' => [
  12. ['account_id' => 'account-x11', 'product' => 'Desk'],
  13. ],
  14. ]
  15. */

has()

has方法确定集合中是否存在给定的键:

  1. $collection = new Collection(['account_id' => 1, 'product' => 'Desk']);
  2. $collection->has('email');
  3. //false

implode()

implode方法连接集合中的项目。 它的参数取决于集合中项目的类型。

如果集合包含数组或对象,则应传递要连接的属性的键,以及要在值之间放置的“粘合”字符串:

  1. $collection = new Collection([
  2. ['account_id' => 1, 'product' => 'Chair'],
  3. ['account_id' => 2, 'product' => 'Desk'],
  4. ]);
  5. $collection->implode('product', ', ');
  6. //Chair, Desk

如果集合包含简单的字符串或数值,只需将“glue”作为方法的唯一参数传递:

  1. new Collection([1, 2, 3, 4, 5])->implode('-');
  2. //'1-2-3-4-5'

intersect() {.collection-method}

intersect方法删除给定array或集合中不存在的任何值:

  1. $collection = new Collection(['Desk', 'Sofa', 'Chair']);
  2. $intersect = $collection->intersect(['Desk', 'Chair', 'Bookcase']);
  3. $intersect->all();
  4. //[0 => 'Desk', 2 => 'Chair']

如您所见,生成的集合将保留原始集合的键。

isEmpty()

如果集合为空,isEmpty方法返回true; 否则返回false

  1. new Collection([])->isEmpty();
  2. //true

keyBy()

按给定键键入集合:

  1. $collection = new Collection([
  2. ['product_id' => 'prod-100', 'name' => 'chair'],
  3. ['product_id' => 'prod-200', 'name' => 'desk'],
  4. ]);
  5. $keyed = $collection->keyBy('product_id');
  6. $keyed->all();
  7. /*
  8. [
  9. 'prod-100' => ['product_id' => 'prod-100', 'name' => 'Chair'],
  10. 'prod-200' => ['product_id' => 'prod-200', 'name' => 'Desk'],
  11. ]
  12. */

如果多个项具有相同的键,则只有最后一个项将出现在新集合中。

您也可以传递自己的回调,该回调应该返回值以通过以下方式键入集合:

  1. $keyed = $collection->keyBy(function ($item) {
  2. return strtoupper($item['product_id']);
  3. });
  4. $keyed->all();
  5. /*
  6. [
  7. 'PROD-100' => ['product_id' => 'prod-100', 'name' => 'Chair'],
  8. 'PROD-200' => ['product_id' => 'prod-200', 'name' => 'Desk'],
  9. ]
  10. */

keys()

keys方法返回所有集合的键:

  1. $collection = new Collection([
  2. 'prod-100' => ['product_id' => 'prod-100', 'name' => 'Chair'],
  3. 'prod-200' => ['product_id' => 'prod-200', 'name' => 'Desk'],
  4. ]);
  5. $keys = $collection->keys();
  6. $keys->all();
  7. //['prod-100', 'prod-200']

last()

last方法返回集合中传递给定真值测试的最后一个元素:

  1. new Collection([1, 2, 3, 4])->last(function ($key, $value) {
  2. return $value < 3;
  3. });
  4. //2

您也可以调用没有参数的last方法来获取集合中的最后一个元素。 如果集合为空,则返回“null”。

  1. new Collection([1, 2, 3, 4])->last();
  2. //4

map()

map方法遍历集合并将每个值传递给给定的回调。 回调可以自由修改项目并将其返回,从而形成一个新的修改项目集合:

  1. $collection = new Collection([1, 2, 3, 4, 5]);
  2. $multiplied = $collection->map(function ($item, $key) {
  3. return $item * 2;
  4. });
  5. $multiplied->all();
  6. //[2, 4, 6, 8, 10]

注意: 像大多数其他集合方法一样,map返回一个新的集合实例; 它不会修改他调用的原集合。 如果要转换原始集合,请使用transform方法。

merge()

merge方法将给定数组合并到集合中。 与集合中的字符串键匹配的数组中的任何字符串键都将覆盖集合中的值:

  1. $collection = new Collection(['product_id' => 1, 'name' => 'Desk']);
  2. $merged = $collection->merge(['price' => 100, 'discount' => false]);
  3. $merged->all();
  4. //['product_id' => 1, 'name' => 'Desk', 'price' => 100, 'discount' => false]

如果给定数组的键是数字,则值将附加到集合的末尾:

  1. $collection = new Collection(['Bookcase', 'Chair']);
  2. $merged = $collection->merge(['Desk', 'Door']);
  3. $merged->all();
  4. //['Bookcase', 'Chair', 'Desk', 'Door']

pluck()

pluck方法检索给定键的所有集合值:

  1. $collection = new Collection([
  2. ['product_id' => 'prod-100', 'name' => 'Chair'],
  3. ['product_id' => 'prod-200', 'name' => 'Desk'],
  4. ]);
  5. $plucked = $collection->pluck('name');
  6. $plucked->all();
  7. //['Chair', 'Desk']

您还可以指定希望如何键入生成的集合:

  1. $plucked = $collection->pluck('name', 'product_id');
  2. $plucked->all();
  3. //['prod-100' => 'Desk', 'prod-200' => 'Chair']

pop()

pop方法删除并返回集合中的最后一项:

  1. $collection = new Collection([1, 2, 3, 4, 5]);
  2. $collection->pop();
  3. //5
  4. $collection->all();
  5. //[1, 2, 3, 4]

prepend()

prepend方法将一个项添加到集合的开头:

  1. $collection = new Collection([1, 2, 3, 4, 5]);
  2. $collection->prepend(0);
  3. $collection->all();
  4. //[0, 1, 2, 3, 4, 5]

pull()

pull方法通过其键从集合中删除并返回一个项:

  1. $collection = new Collection(['product_id' => 'prod-100', 'name' => 'Desk']);
  2. $collection->pull('name');
  3. //'Desk'
  4. $collection->all();
  5. //['product_id' => 'prod-100']

push()

push方法将一个项追加到集合的末尾:

  1. $collection = new Collection([1, 2, 3, 4]);
  2. $collection->push(5);
  3. $collection->all();
  4. //[1, 2, 3, 4, 5]

put()

put方法设置集合中给定的键和值:

  1. $collection = new Collection(['product_id' => 1, 'name' => 'Desk']);
  2. $collection->put('price', 100);
  3. $collection->all();
  4. //['product_id' => 1, 'name' => 'Desk', 'price' => 100]

random()

random方法从集合中返回一个随机项:

  1. $collection = new Collection([1, 2, 3, 4, 5]);
  2. $collection->random();
  3. //4 - (retrieved randomly)

您可以选择将整数传递给random。 如果该整数大于“1”,则返回一组项目:

  1. $random = $collection->random(3);
  2. $random->all();
  3. //[2, 4, 5] - (随机检索)

reduce()

reduce方法将集合减少为单个值,将每次迭代的结果传递给后续迭代:

  1. $collection = new Collection([1, 2, 3]);
  2. $total = $collection->reduce(function ($carry, $item) {
  3. return $carry + $item;
  4. });
  5. //6

第一次迭代时$carry的值为null; 但是,您可以通过将第二个参数传递给reduce来指定其初始值:

  1. $collection->reduce(function ($carry, $item) {
  2. return $carry + $item;
  3. }, 4);
  4. //10

reject()

reject方法使用给定的回调过滤集合。 对于要从结果集合中删除的任何项,回调应返回“true”:

  1. $collection = new Collection([1, 2, 3, 4]);
  2. $filtered = $collection->reject(function ($item) {
  3. return $item > 2;
  4. });
  5. $filtered->all();
  6. //[1, 2]

对于reject方法的反转,请参见filter方法。

reverse() {.collection-method}

reverse方法反转集合项的顺序:

  1. $collection = new Collection([1, 2, 3, 4, 5]);
  2. $reversed = $collection->reverse();
  3. $reversed->all();
  4. //[5, 4, 3, 2, 1]

search()

search方法在集合中搜索给定值,如果找到则返回其密钥。 如果找不到该项,则返回“false”。

  1. $collection = new Collection([2, 4, 6, 8]);
  2. $collection->search(4);
  3. //1

搜索是使用“松散”比较完成的。 要使用严格比较,请将“true”作为方法的第二个参数传递:

  1. $collection->search('4', true);
  2. //false

或者,您可以传入自己的回调来搜索通过真实测试的第一个项目:

  1. $collection->search(function ($item, $key) {
  2. return $item > 5;
  3. });
  4. //2

shift()

shift方法删除并返回集合中的第一个项:

  1. $collection = new Collection([1, 2, 3, 4, 5]);
  2. $collection->shift();
  3. //1
  4. $collection->all();
  5. //[2, 3, 4, 5]

shuffle()

shuffle方法随机洗牌集合中的项目:

  1. $collection = new Collection([1, 2, 3, 4, 5]);
  2. $shuffled = $collection->shuffle();
  3. $shuffled->all();
  4. //[3, 2, 5, 1, 4] (随机生成)

slice()

slice方法返回从给定索引开始的集合切片:

  1. $collection = new Collection([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]);
  2. $slice = $collection->slice(4);
  3. $slice->all();
  4. //[5, 6, 7, 8, 9, 10]

如果要限制返回切片的大小,请将所需大小作为方法的第二个参数传递:

  1. $slice = $collection->slice(4, 2);
  2. $slice->all();
  3. //[5, 6]

返回的切片将具有新的数字索引键。 如果要保留原始键,请将“true”作为方法的第三个参数传递。

sort()

sort方法对集合进行排序:

  1. $collection = new Collection([5, 3, 1, 2, 4]);
  2. $sorted = $collection->sort();
  3. $sorted->values()->all();
  4. //[1, 2, 3, 4, 5]

已排序的集合保留原始数组键。 在这个例子中,我们使用values方法将键重置为连续编号的索引。

有关对嵌套数组或对象的集合进行排序,请参阅sortBysortByDesc方法。

如果您的排序需求更高级,您可以使用自己的算法将回调传递给sort。 请参阅usort上的PHP文档,这是集合的sort方法调用的内容。 引擎盖。

sortBy()

sortBy方法按给定键对集合进行排序:

  1. $collection = new Collection([
  2. ['name' => 'Desk', 'price' => 200],
  3. ['name' => 'Chair', 'price' => 100],
  4. ['name' => 'Bookcase', 'price' => 150],
  5. ]);
  6. $sorted = $collection->sortBy('price');
  7. $sorted->values()->all();
  8. /*
  9. [
  10. ['name' => 'Chair', 'price' => 100],
  11. ['name' => 'Bookcase', 'price' => 150],
  12. ['name' => 'Desk', 'price' => 200],
  13. ]
  14. */

已排序的集合保留原始数组键。 在这个例子中,我们使用values方法将键重置为连续编号的索引。

您还可以传递自己的回调以确定如何对集合值进行排序:

  1. $collection = new Collection([
  2. ['name' => 'Desk', 'colors' => ['Black', 'Mahogany']],
  3. ['name' => 'Chair', 'colors' => ['Black']],
  4. ['name' => 'Bookcase', 'colors' => ['Red', 'Beige', 'Brown']],
  5. ]);
  6. $sorted = $collection->sortBy(function ($product, $key) {
  7. return count($product['colors']);
  8. });
  9. $sorted->values()->all();
  10. /*
  11. [
  12. ['name' => 'Chair', 'colors' => ['Black']],
  13. ['name' => 'Desk', 'colors' => ['Black', 'Mahogany']],
  14. ['name' => 'Bookcase', 'colors' => ['Red', 'Beige', 'Brown']],
  15. ]
  16. */

sortByDesc()

此方法与sortBy方法具有相同的签名,但会以相反的顺序对集合进行排序。

splice()

splice方法从指定的索引处删除并返回一条项目:

  1. $collection = new Collection([1, 2, 3, 4, 5]);
  2. $chunk = $collection->splice(2);
  3. $chunk->all();
  4. //[3, 4, 5]
  5. $collection->all();
  6. //[1, 2]

您可以传递第二个参数来限制生成的块的大小:

  1. $collection = new Collection([1, 2, 3, 4, 5]);
  2. $chunk = $collection->splice(2, 1);
  3. $chunk->all();
  4. //[3]
  5. $collection->all();
  6. //[1, 2, 4, 5]

此外,您可以传递包含新项的第三个参数来替换从集合中删除的项:

  1. $collection = new Collection([1, 2, 3, 4, 5]);
  2. $chunk = $collection->splice(2, 1, [10, 11]);
  3. $chunk->all();
  4. //[3]
  5. $collection->all();
  6. //[1, 2, 10, 11, 4, 5]

sum()

sum方法返回集合中所有项的总和:

  1. new Collection([1, 2, 3, 4, 5])->sum();
  2. //15

如果集合包含嵌套数组或对象,则应传递一个键以用于确定要求和的值:

  1. $collection = new Collection([
  2. ['name' => 'JavaScript: The Good Parts', 'pages' => 176],
  3. ['name' => 'JavaScript: The Definitive Guide', 'pages' => 1096],
  4. ]);
  5. $collection->sum('pages');
  6. //1272

此外,您可以传递自己的回调以确定要汇总的集合的哪些值:

  1. $collection = new Collection([
  2. ['name' => 'Chair', 'colors' => ['Black']],
  3. ['name' => 'Desk', 'colors' => ['Black', 'Mahogany']],
  4. ['name' => 'Bookcase', 'colors' => ['Red', 'Beige', 'Brown']],
  5. ]);
  6. $collection->sum(function ($product) {
  7. return count($product['colors']);
  8. });
  9. //6

take()

take方法返回一个具有指定项数的新集合:

  1. $collection = new Collection([0, 1, 2, 3, 4, 5]);
  2. $chunk = $collection->take(3);
  3. $chunk->all();
  4. //[0, 1, 2]

您还可以传递一个负整数,以从集合的末尾获取指定数量的项:

  1. $collection = new Collection([0, 1, 2, 3, 4, 5]);
  2. $chunk = $collection->take(-2);
  3. $chunk->all();
  4. //[4, 5]

toArray()

toArray方法将集合转换为普通的PHP数组。 如果集合的值是数据库模型,模型也将转换为数组:

  1. $collection = new Collection(['name' => 'Desk', 'price' => 200]);
  2. $collection->toArray();
  3. /*
  4. [
  5. ['name' => 'Desk', 'price' => 200],
  6. ]
  7. */

注意: toArray还将其所有嵌套对象转换为数组。 如果要按原样获取底层数组,请改用all方法。

toJson()

toJson方法将集合转换为JSON:

  1. $collection = new Collection(['name' => 'Desk', 'price' => 200]);
  2. $collection->toJson();
  3. //'{"name":"Desk","price":200}'

transform()

transform方法遍历集合并使用集合中的每个项调用给定的回调。 集合中的项目将替换为回调返回的值:

  1. $collection = new Collection([1, 2, 3, 4, 5]);
  2. $collection->transform(function ($item, $key) {
  3. return $item * 2;
  4. });
  5. $collection->all();
  6. //[2, 4, 6, 8, 10]

注意: 与大多数其他集合方法不同,transform修改集合本身。 如果您希望改为创建新集合,请使用map方法。

unique()

unique方法返回集合中的所有唯一项:

  1. $collection = new Collection([1, 1, 2, 2, 3, 4, 2]);
  2. $unique = $collection->unique();
  3. $unique->values()->all();
  4. //[1, 2, 3, 4]

返回的集合保留原始数组键。 在这个例子中,我们使用values方法将键重置为连续编号的索引。

处理嵌套数组或对象时,您可以指定用于确定唯一性的键:

  1. $collection = new Collection([
  2. ['name' => 'iPhone 6', 'brand' => 'Apple', 'type' => 'phone'],
  3. ['name' => 'iPhone 5', 'brand' => 'Apple', 'type' => 'phone'],
  4. ['name' => 'Apple Watch', 'brand' => 'Apple', 'type' => 'watch'],
  5. ['name' => 'Galaxy S6', 'brand' => 'Samsung', 'type' => 'phone'],
  6. ['name' => 'Galaxy Gear', 'brand' => 'Samsung', 'type' => 'watch'],
  7. ]);
  8. $unique = $collection->unique('brand');
  9. $unique->values()->all();
  10. /*
  11. [
  12. ['name' => 'iPhone 6', 'brand' => 'Apple', 'type' => 'phone'],
  13. ['name' => 'Galaxy S6', 'brand' => 'Samsung', 'type' => 'phone'],
  14. ]
  15. */

您也可以传递自己的回调以确定项目唯一性:

  1. $unique = $collection->unique(function ($item) {
  2. return $item['brand'].$item['type'];
  3. });
  4. $unique->values()->all();
  5. /*
  6. [
  7. ['name' => 'iPhone 6', 'brand' => 'Apple', 'type' => 'phone'],
  8. ['name' => 'Apple Watch', 'brand' => 'Apple', 'type' => 'watch'],
  9. ['name' => 'Galaxy S6', 'brand' => 'Samsung', 'type' => 'phone'],
  10. ['name' => 'Galaxy Gear', 'brand' => 'Samsung', 'type' => 'watch'],
  11. ]
  12. */

values()

values方法返回一个新的集合,其中键重置为连续的整数:

  1. $collection = new Collection([
  2. 10 => ['product' => 'Desk', 'price' => 200],
  3. 11 => ['product' => 'Desk', 'price' => 200]
  4. ]);
  5. $values = $collection->values();
  6. $values->all();
  7. /*
  8. [
  9. 0 => ['product' => 'Desk', 'price' => 200],
  10. 1 => ['product' => 'Desk', 'price' => 200],
  11. ]
  12. */

where()

where方法按给定的键/值对过滤集合:

  1. $collection = new Collection([
  2. ['product' => 'Desk', 'price' => 200],
  3. ['product' => 'Chair', 'price' => 100],
  4. ['product' => 'Bookcase', 'price' => 150],
  5. ['product' => 'Door', 'price' => 100],
  6. ]);
  7. $filtered = $collection->where('price', 100);
  8. $filtered->all();
  9. /*
  10. [
  11. ['product' => 'Chair', 'price' => 100],
  12. ['product' => 'Door', 'price' => 100],
  13. ]
  14. */

检查项目值时,where方法使用严格的比较。 使用whereLoose方法使用“松散”比较进行过滤。

whereLoose()

该方法与where方法具有相同的签名; 但是,所有值都使用“松散”比较进行比较。

zip()

zip方法将给定数组的值与相应索引处的集合值合并在一起:

  1. $collection = new Collection(['Chair', 'Desk']);
  2. $zipped = $collection->zip([100, 200]);
  3. $zipped->all();
  4. //[['Chair', 100], ['Desk', 200]]