类 ResultSetDecorator
通用 ResultSet 装饰器。这将使任何可遍历对象看起来像数据库结果。
方法摘要
-
__construct() public
构造函数。您可以提供数组或任何可遍历对象。
-
__debugInfo() public
返回一个可以用来描述该对象内部状态的数组。
-
__serialize() public
返回一个用于序列化该对象的数组。
-
__unserialize() public
重建 Collection 实例。
-
_createMatcherFilter() protected
返回一个可调用对象,该对象接收一个值并返回该值是否满足某些条件。
-
_extract() protected
从 $data 中返回一个列,该列可以通过遍历 $path 中包含的列名来提取。它将为用
{*}
表示的元素返回数组。 -
_propertyExtractor() protected
返回一个可调用对象,该对象可以用来根据点分隔的路径从数组或对象中提取属性或列。
-
_simpleExtract() protected
从 $data 中返回一个列,该列可以通过遍历 $path 中包含的列名来提取。
-
append() public
返回一个新的集合,该集合是将该集合中的元素列表与传递的元素列表连接在一起的结果。
-
appendItem() public
追加一个单独的项目,创建一个新的集合。
-
avg() public
返回使用 $path 或该集合提取的所有值的平均值。
-
buffered() public
返回一个新的集合,其中包含该集合执行的操作。无论新集合迭代多少次,这些操作都只会执行一次。
-
cartesianProduct() public
创建一个新的集合,它是当前集合的笛卡尔积。
-
chunk() public
将集合分解成给定大小的较小的数组。
-
chunkWithKeys() public
将集合分解成给定大小的较小的数组。
-
combine() public
返回一个新的集合,其中包含基于值路径提取的值,然后按键路径索引。可选地,该方法可以根据组属性路径生成父组。
-
compile() public
迭代该集合中的所有元素一次并执行所有堆叠的操作,最后返回一个包含结果的新集合。这对于将不可回绕的内部迭代器转换为可回绕并可多次使用的集合很有用。
-
contains() public
如果 $value 存在于该集合中,则返回 true。比较是通过值和类型进行的。
-
count() public
返回集合中的元素数量。
-
countBy() public
将列表排序成组,并返回每个组中元素的数量。类似于 groupBy,但不是返回值的列表,而是返回该组中值的计数。
-
countKeys() public
返回此迭代器中唯一键的数量。这与调用
toArray()
后集合将包含的元素数量相同。 -
each() public
将回调应用于该集合中的元素。
-
every() public
如果该集合中的所有值都通过了回调中提供的真值测试,则返回 true。
-
extract() public
返回一个新的集合,其中包含在每个元素中找到的列或属性值。
-
filter() public
遍历集合中的每个值,并返回另一个包含通过真值测试的所有值的集合。只有回调返回 true 的值才会出现在结果集合中。
-
first() public
返回该集合中的第一个结果。
-
firstMatch() public
返回第一个与条件中列出的所有键值对匹配的结果。
-
groupBy() public
将集合拆分为集合,根据对每个值运行回调的结果进行分组。如果 $callback 是字符串而不是可调用对象,则根据每个值的 $callback 所命名的属性进行分组。
-
indexBy() public
给定一个列表和一个回调函数,该函数为列表中的每个元素返回一个键(或属性名),返回一个包含每个项目的索引的对象。就像 groupBy,但对于知道键是唯一的时情况。
-
insert() public
返回一个新的集合,该集合包含在
$values
中找到的每个元素作为该集合中对应元素的属性。将插入值的属性由$path
参数描述。 -
isEmpty() public
返回该集合中是否包含元素。
-
jsonSerialize() public
返回可以转换为 JSON 的数据。这与
toArray()
返回相同的数据,该数据只包含唯一键。 -
last() public
返回该集合中的最后一个结果。
-
lazy() public
返回一个新的集合,其中保证在它之后链接的任何操作都是延迟执行的。也就是说,元素将一次产生一个。
-
listNested() public
返回一个新的集合,该集合包含该集合中的每个元素,在扁平化树结构之后。树结构是通过将元素嵌套在具有已知名称的键下定义的。可以通过使用 '$nestingKey' 参数来指定此类名称。
-
map() public
使用提供的可调用对象修改此集合中的每个值后,返回另一个集合。
-
match() public
遍历列表中的每个值,返回一个包含所有包含 $conditions 中列出的所有键值对的值的 Collection。
-
max() public
根据属性排序后,返回该集合中的最顶层元素。有关回调和 $sort 参数的信息,请查看 sortBy 方法。
-
median() public
返回使用 $path 或该集合提取的所有值的中间值。
-
min() public
根据属性排序后,返回该集合中的最底层元素。有关回调和 $sort 参数的信息,请查看 sortBy 方法。
-
nest() public
返回一个新的集合,其中值根据 id 属性路径和父 id 属性路径嵌套在树状结构中。
-
newCollection() protected
返回一个新的集合。
-
optimizeUnwrap() protected
解开此迭代器并返回最简单的可遍历对象,该对象可用于获取数据。
-
prepend() public
将一组项目添加到集合的开头,创建一个新的集合。
-
prependItem() public
添加一个单独的项目到开头,创建一个新的集合。
-
reduce() public
将该集合中的值折叠成一个单一的值,作为将回调函数应用于所有元素的结果。$initial 是缩减的初始状态,并且每个后续步骤都应该由回调函数返回。如果省略 $initial,则集合的第一个值将用作其替代,并且缩减将从第二个项目开始。
-
reject() public
遍历集合中的每个值,并返回另一个包含所有未通过真值测试的值的集合。这与
filter
相反。 -
sample() public
返回一个新的集合,其中包含从该集合中随机选择的最多 $length 个元素。
-
shuffle() public
返回一个元素按随机顺序排列的新集合,此函数不保留集合中的原始键。
-
skip() public
返回一个新集合,该集合将跳过迭代开始处的指定数量的元素。
-
some() public
如果此集合中的任何值通过回调中提供的真值测试,则返回 true。
-
sortBy() public
根据将回调函数应用于每个值的结果对该集合中的元素进行排序,返回一个排序的迭代器。参数 $path 也可以是表示列或属性名称的字符串。
-
stopWhen() public
创建一个新的集合,当迭代时,如果提供的条件计算结果为 true,则停止生成结果。
-
sumOf() public
返回使用 $matcher 提取的所有值的总和或此集合的总和。
-
take() public
返回一个新集合,该集合包含以创建此集合的内部顺序排列的最多 $length 个元素。如果传递第二个参数,它将确定从哪个位置开始获取元素。
-
takeLast() public
返回集合的最后 N 个元素。
-
through() public
将此集合作为第一个参数传递给一个可调用对象。这对于使用另一个对象装饰整个集合很有用。
-
toArray() public
返回结果的数组表示。
-
toList() public
返回结果的数字索引数组表示。这相当于调用
toArray(false)
-
transpose() public
将行和列转置为列和行。
-
unfold() public
创建一个新的集合,其中项目是将转换器函数应用于原始集合中的每个项目生成的项目列表连接起来的。
-
unique() public
循环遍历集合中的每个值,并返回一个新集合,该集合仅包含基于
callback
返回的值的唯一值。 -
unwrap() public
返回可以安全遍历而不会丢失任何可能转换的最接近的嵌套迭代器。这主要用于删除只能减慢迭代过程的空 IteratorIterator 包装器。
-
zip() public
使用它们的位置索引作为参考,将此集合的元素与传递的迭代器中的每个元素组合起来。
-
zipWith() public
使用它们的位置索引作为参考,将此集合的元素与传递的迭代器中的每个元素组合起来。
方法详情
__construct() ¶ public
__construct(iterable $items)
构造函数。您可以提供数组或任何可遍历对象。
参数
-
iterable
$items 项目。
抛出
InvalidArgumentException
如果传递了错误的项目类型。
__debugInfo() ¶ public
__debugInfo(): array<string, mixed>
返回一个可以用来描述该对象内部状态的数组。
返回
array<string, mixed>
__unserialize() ¶ public
__unserialize(array $data): void
重建 Collection 实例。
参数
-
array
$data 数据数组。
返回
void
_createMatcherFilter() ¶ protected
_createMatcherFilter(array $conditions): Closure
返回一个可调用对象,该对象接收一个值并返回该值是否满足某些条件。
参数
-
array
$conditions 要匹配的条件的键值列表,其中键是从当前项目获取的属性路径,值是要与项目进行比较的值。
返回
Closure
_extract() ¶ protected
_extract(ArrayAccess<string|int, mixed>|array $data, list<string> $parts): mixed
从 $data 中返回一个列,该列可以通过遍历 $path 中包含的列名来提取。它将为用 {*}
表示的元素返回数组。
参数
-
ArrayAccess<string|int, mixed>|array
$data 数据。
-
list<string>
$parts 要提取的路径。
返回
mixed
_propertyExtractor() ¶ protected
_propertyExtractor(callable|string $path): Closure
返回一个可调用对象,该对象可以用来根据点分隔的路径从数组或对象中提取属性或列。
参数
-
callable|string
$path 要遵循的列的点分隔路径,以便可以返回最终的路径,或者可以执行此操作的可调用对象。
返回
Closure
_simpleExtract() ¶ protected
_simpleExtract(ArrayAccess<string|int, mixed>|array $data, list<string> $parts): mixed
从 $data 中返回一个列,该列可以通过遍历 $path 中包含的列名来提取。
参数
-
ArrayAccess<string|int, mixed>|array
$data 数据。
-
list<string>
$parts 要提取的路径。
返回
mixed
append() ¶ public
append(iterable $items): self
返回一个新的集合,该集合是将该集合中的元素列表与传递的元素列表连接在一起的结果。
参数
-
iterable
$items 项目列表。
返回
self
appendItem() ¶ public
appendItem(mixed $item, mixed $key = null): self
追加一个单独的项目,创建一个新的集合。
参数
-
mixed
$item 要追加的项目。
-
mixed
$key optional 将项目追加到的键。如果为空,则会生成一个键。
返回
self
avg() ¶ public
avg(callable|string|null $path = null): float|int|null
返回使用 $path 或该集合提取的所有值的平均值。
示例
$items = [
['invoice' => ['total' => 100]],
['invoice' => ['total' => 200]]
];
$total = (new Collection($items))->avg('invoice.total');
// Total: 150
$total = (new Collection([1, 2, 3]))->avg();
// Total: 2
空集或 0 行的平均值为 null
。包含 null
值的集合不被视为为空。
参数
-
callable|string|null
$path optional 要计算平均值的属性名称或函数如果未传递值,则将使用恒等函数。该函数将返回要计算平均值的属性的值。
返回
float|int|null
buffered() ¶ public
buffered(): self
返回一个新的集合,其中包含该集合执行的操作。无论新集合迭代多少次,这些操作都只会执行一次。
这也可用于使任何不可回绕的迭代器可回绕。
返回
self
cartesianProduct() ¶ public
cartesianProduct(callable|null $operation = null, callable|null $filter = null): self
创建一个新的集合,它是当前集合的笛卡尔积。
为了创建笛卡尔积,集合必须包含一个数据维度。
示例
$collection = new Collection([['A', 'B', 'C'], [1, 2, 3]]);
$result = $collection->cartesianProduct()->toArray();
$expected = [
['A', 1],
['A', 2],
['A', 3],
['B', 1],
['B', 2],
['B', 3],
['C', 1],
['C', 2],
['C', 3],
];
参数
-
callable|null
$operation optional 可调用对象,允许您自定义产品结果。
-
callable|null
$filter optional 必须返回 true 的过滤回调,以便结果成为最终结果的一部分。
返回
self
chunk() ¶ public
chunk(int $chunkSize): self
将集合分解成给定大小的较小的数组。
示例
$items [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11];
$chunked = (new Collection($items))->chunk(3)->toList();
// Returns [[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11]]
参数
-
int
$chunkSize 每个块的最大大小。
返回
self
chunkWithKeys() ¶ public
chunkWithKeys(int $chunkSize, bool $keepKeys = true): self
将集合分解成给定大小的较小的数组。
示例
$items ['a' => 1, 'b' => 2, 'c' => 3, 'd' => 4, 'e' => 5, 'f' => 6];
$chunked = (new Collection($items))->chunkWithKeys(3)->toList();
// Returns [['a' => 1, 'b' => 2, 'c' => 3], ['d' => 4, 'e' => 5, 'f' => 6]]
参数
-
int
$chunkSize 每个块的最大大小。
-
bool
$keepKeys optional 是否应该保留数组的键。
返回
self
combine() ¶ public
combine(callable|string $keyPath, callable|string $valuePath, callable|string|null $groupPath = null): self
返回一个新的集合,其中包含基于值路径提取的值,然后按键路径索引。可选地,该方法可以根据组属性路径生成父组。
示例
$items = [
['id' => 1, 'name' => 'foo', 'parent' => 'a'],
['id' => 2, 'name' => 'bar', 'parent' => 'b'],
['id' => 3, 'name' => 'baz', 'parent' => 'a'],
];
$combined = (new Collection($items))->combine('id', 'name');
// Result will look like this when converted to array
[
1 => 'foo',
2 => 'bar',
3 => 'baz',
];
$combined = (new Collection($items))->combine('id', 'name', 'parent');
// Result will look like this when converted to array
[
'a' => [1 => 'foo', 3 => 'baz'],
'b' => [2 => 'bar'],
];
参数
-
callable|string
$keyPath 用于索引的列名路径或返回提供的元素的索引键的函数
-
callable|string
$valuePath 用作数组值的列名路径或返回提供的元素的值的函数
-
callable|string|null
$groupPath optional 用作父分组键的列名路径或返回提供的元素的键的函数
返回
self
compile() ¶ public
compile(bool $keepKeys = true): self
迭代该集合中的所有元素一次并执行所有堆叠的操作,最后返回一个包含结果的新集合。这对于将不可回绕的内部迭代器转换为可回绕并可多次使用的集合很有用。
一个常见的用例是将同一个变量重复用于计算不同的数据。在这种情况下,首先编译一个集合,然后对其应用更多操作可能会有所帮助,并且性能更高。
示例
$collection->map($mapper)->sortBy('age')->extract('name');
$compiled = $collection->compile();
$isJohnHere = $compiled->some($johnMatcher);
$allButJohn = $compiled->filter($johnMatcher);
在上面的示例中,如果在之前没有编译集合,则将对 map
、sortBy
和 extract
进行迭代两次:一次用于获取 $isJohnHere
,一次用于 $allButJohn
您可以将此方法视为在集合中创建复杂计算的保存点的方式。
参数
-
bool
$keepKeys optional 是否使用此集合返回的键作为数组键。请记住,迭代器返回同一个键以用于不同的元素是有效的,将此值设置为 false 可以帮助获取所有项目(如果键在结果中并不重要)。
返回
self
contains() ¶ public
contains(mixed $value): bool
如果 $value 存在于该集合中,则返回 true。比较是通过值和类型进行的。
参数
-
mixed
$value 要检查的值。
返回
bool
count() ¶ public
count(): int
返回集合中的元素数量。
警告
将更改迭代器的当前位置。
在迭代这些集合的同时调用此方法(例如在 foreach 中)会导致未定义的行为。避免这样做。
使用 NoRewindIterator 集合消耗所有元素
在某些类型的集合上,调用此方法可能会导致在之后无法使用。也就是说,您可能无法再从中获取元素,或者无法再对其进行迭代。
具体来说,任何包含生成器(带有 yield 语句的函数)或未缓冲的数据库游标的集合,在对其调用 count()
之后将不再接受任何其他函数调用。
使用 buffered()
方法创建一个新集合来解决此问题。
报告的元素可能多于唯一键
通过将集合追加在一起或通过内部迭代器返回重复键构建的任何集合,在将集合转换为带键的数组时,使用此函数报告的元素数量将多于最终的元素数量。这是因为重复键将被折叠为最终数组中的单个键,而此计数方法只关心将集合转换为普通列表后的元素数量。
如果您需要在考虑键的情况下计算元素的数量(唯一键的数量),您可以调用 countKeys()
返回
int
countBy() ¶ public
countBy(callable|string $path): self
将列表排序成组,并返回每个组中元素的数量。类似于 groupBy,但不是返回值的列表,而是返回该组中值的计数。
如果 $callback 是字符串,则它应该是要提取的属性名称,或应该遵循以获取路径中最后一个属性的点分隔路径。
示例
$items = [
['id' => 1, 'name' => 'foo', 'parent_id' => 10],
['id' => 2, 'name' => 'bar', 'parent_id' => 11],
['id' => 3, 'name' => 'baz', 'parent_id' => 10],
];
$group = (new Collection($items))->countBy('parent_id');
// Or
$group = (new Collection($items))->countBy(function ($e) {
return $e['parent_id'];
});
// Result will look like this when converted to array
[
10 => 2,
11 => 1
];
参数
-
callable|string
$path 用于索引的列名或返回值的回调。或者返回提供的元素的索引键的函数
返回
self
countKeys() ¶ public
countKeys(): int
返回此迭代器中唯一键的数量。这与调用 toArray()
后集合将包含的元素数量相同。
此方法有一些注意事项。有关详细信息,请参阅 CollectionInterface::count()
。
返回
int
另请参阅
each() ¶ public
each(callable $callback): $this
将回调应用于该集合中的元素。
示例
$collection = (new Collection($items))->each(function ($value, $key) {
echo "Element $key: $value";
});
参数
-
callable
$callback 对集合中的每个元素运行的回调。
返回
$this
every() ¶ public
every(callable $callback): bool
如果该集合中的所有值都通过了回调中提供的真值测试,则返回 true。
回调传递正在测试的元素的值和键,如果测试通过,则应返回 true。
示例
$overTwentyOne = (new Collection([24, 45, 60, 15]))->every(function ($value, $key) {
return $value > 21;
});
空集合始终返回 true。
参数
-
callable
$callback 回调函数
返回
bool
extract() ¶ public
extract(callable|string $path): self
返回一个新的集合,其中包含在每个元素中找到的列或属性值。
匹配器可以是包含要提取的属性名称的字符串,也可以是应该遵循以获取路径中最后一个属性的点分隔路径。
如果在集合的特定元素中找不到列或属性,则该位置将填充为 null。
示例
提取数组中所有评论的用户名
$items = [
['comment' => ['body' => 'cool', 'user' => ['name' => 'Mark']],
['comment' => ['body' => 'very cool', 'user' => ['name' => 'Renan']]
];
$extracted = (new Collection($items))->extract('comment.user.name');
// Result will look like this when converted to array
['Mark', 'Renan']
也可以从嵌套属性中提取扁平化的集合
$items = [
['comment' => ['votes' => [['value' => 1], ['value' => 2], ['value' => 3]]],
['comment' => ['votes' => [['value' => 4]]
];
$extracted = (new Collection($items))->extract('comment.votes.{*}.value');
// Result will contain
[1, 2, 3, 4]
参数
-
callable|string
$path 要遵循的列的点分隔路径,以便可以返回最终的路径,或者可以执行此操作的可调用对象。
返回
self
filter() ¶ public
filter(callable|null $callback = null): self
遍历集合中的每个值,并返回另一个包含通过真值测试的所有值的集合。只有回调返回 true 的值才会出现在结果集合中。
每次执行回调时,它都会按顺序接收当前迭代中元素的值、元素的键和此集合作为参数。
示例
在数组中过滤奇数,最后只有值 2 会出现在结果集合中
$collection = (new Collection([1, 2, 3]))->filter(function ($value, $key) {
return $value % 2 === 0;
});
参数
-
callable|null
$callback optional 将接收每个元素并返回 true(是否应该在结果集合中)的方法。如果保留为 null,则将使用过滤掉虚假值的回调。
返回
self
firstMatch() ¶ public
firstMatch(array $conditions): mixed
返回第一个与条件中列出的所有键值对匹配的结果。
参数
-
array
$conditions 条件的键值列表,其中键是
Collection::extract
接受的属性路径,值是每个元素将与之匹配的条件
返回
mixed
另请参阅
groupBy() ¶ public
groupBy(callable|string $path): self
将集合拆分为集合,根据对每个值运行回调的结果进行分组。如果 $callback 是字符串而不是可调用对象,则根据每个值的 $callback 所命名的属性进行分组。
如果 $callback 是字符串,则它应该是要提取的属性名称,或应该遵循以获取路径中最后一个属性的点分隔路径。
示例
$items = [
['id' => 1, 'name' => 'foo', 'parent_id' => 10],
['id' => 2, 'name' => 'bar', 'parent_id' => 11],
['id' => 3, 'name' => 'baz', 'parent_id' => 10],
];
$group = (new Collection($items))->groupBy('parent_id');
// Or
$group = (new Collection($items))->groupBy(function ($e) {
return $e['parent_id'];
});
// Result will look like this when converted to array
[
10 => [
['id' => 1, 'name' => 'foo', 'parent_id' => 10],
['id' => 3, 'name' => 'baz', 'parent_id' => 10],
],
11 => [
['id' => 2, 'name' => 'bar', 'parent_id' => 11],
]
];
参数
-
callable|string
$path 用于分组的列名或返回值的回调。或者返回提供的元素的分组键的函数
返回
self
indexBy() ¶ public
indexBy(callable|string $path): self
给定一个列表和一个回调函数,该函数为列表中的每个元素返回一个键(或属性名),返回一个包含每个项目的索引的对象。就像 groupBy,但对于知道键是唯一的时情况。
如果 $callback 是字符串,则它应该是要提取的属性名称,或应该遵循以获取路径中最后一个属性的点分隔路径。
示例
$items = [
['id' => 1, 'name' => 'foo'],
['id' => 2, 'name' => 'bar'],
['id' => 3, 'name' => 'baz'],
];
$indexed = (new Collection($items))->indexBy('id');
// Or
$indexed = (new Collection($items))->indexBy(function ($e) {
return $e['id'];
});
// Result will look like this when converted to array
[
1 => ['id' => 1, 'name' => 'foo'],
3 => ['id' => 3, 'name' => 'baz'],
2 => ['id' => 2, 'name' => 'bar'],
];
参数
-
callable|string
$path 用于索引的列名或返回值的回调。或者返回提供的元素的索引键的函数
返回
self
insert() ¶ public
insert(string $path, mixed $values): self
返回一个新的集合,该集合包含在 $values
中找到的每个元素作为该集合中对应元素的属性。将插入值的属性由 $path
参数描述。
$path 可以是包含属性名称的字符串,也可以是应该遵循以获取路径中最后一个属性的点分隔路径。
如果在集合的特定元素中找不到列或属性作为路径的一部分,则该元素将保持不变。
示例
将年龄插入包含用户的集合中
$items = [
['comment' => ['body' => 'cool', 'user' => ['name' => 'Mark']],
['comment' => ['body' => 'awesome', 'user' => ['name' => 'Renan']]
];
$ages = [25, 28];
$inserted = (new Collection($items))->insert('comment.user.age', $ages);
// Result will look like this when converted to array
[
['comment' => ['body' => 'cool', 'user' => ['name' => 'Mark', 'age' => 25]],
['comment' => ['body' => 'awesome', 'user' => ['name' => 'Renan', 'age' => 28]]
];
参数
-
string
$path 一个点分隔的字符串,象征着要在每个值的层次结构中遵循的路径,以便可以插入该值
-
mixed
$values 要在指定路径处插入的值,值与其位置索引匹配集合中的元素。
返回
self
isEmpty() ¶ public
isEmpty(): bool
返回该集合中是否包含元素。
示例
$items [1, 2, 3];
(new Collection($items))->isEmpty(); // false
(new Collection([]))->isEmpty(); // true
返回
bool
jsonSerialize() ¶ public
jsonSerialize(): array
返回可以转换为 JSON 的数据。这与 toArray()
返回相同的数据,该数据只包含唯一键。
JsonSerializable 接口的一部分。
返回
array
lazy() ¶ public
lazy(): self
返回一个新的集合,其中保证在它之后链接的任何操作都是延迟执行的。也就是说,元素将一次产生一个。
延迟集合只能迭代一次。第二次尝试会导致错误。
返回
self
listNested() ¶ public
listNested(string|int $order = 'desc', callable|string $nestingKey = 'children'): self
返回一个新的集合,该集合包含该集合中的每个元素,在扁平化树结构之后。树结构是通过将元素嵌套在具有已知名称的键下定义的。可以通过使用 '$nestingKey' 参数来指定此类名称。
默认情况下,将返回树中遵循深度优先搜索的所有元素,即从每个分支的顶部父节点到叶节点的元素。
通过将 '$dir' 参数与 'asc' 一起传递,可以返回从底部到顶部的所有元素。也就是说,它将首先返回相同树深度的所有元素,然后从底部到顶部。
最后,您可以指定只获取树结构中的叶节点的集合。您可以通过在第一个参数中传递 'leaves' 来做到这一点。
第一个参数的可能值是以下常量的别名,并且可以使用它们代替别名。
- desc: RecursiveIteratorIterator::SELF_FIRST
- asc: RecursiveIteratorIterator::CHILD_FIRST
- leaves: RecursiveIteratorIterator::LEAVES_ONLY
示例
$collection = new Collection([
['id' => 1, 'children' => [['id' => 2, 'children' => [['id' => 3]]]]],
['id' => 4, 'children' => [['id' => 5]]]
]);
$flattenedIds = $collection->listNested()->extract('id'); // Yields [1, 2, 3, 4, 5]
参数
-
string|int
$order optional 返回元素的顺序
-
callable|string
$nestingKey optional 子级嵌套在其中的键名或返回子级列表的可调用函数
返回
self
map() ¶ public
map(callable $callback): self
使用提供的可调用对象修改此集合中的每个值后,返回另一个集合。
每次执行回调时,它都会按顺序接收当前迭代中元素的值、元素的键和此集合作为参数。
示例
获取布尔值的集合,其中 true 表示一个人是女性
$collection = (new Collection($people))->map(function ($person, $key) {
return $person->gender === 'female';
});
参数
-
callable
$callback 将接收每个元素并返回正在迭代的键的新值的方法
返回
self
match() ¶ public
match(array $conditions): self
遍历列表中的每个值,返回一个包含所有包含 $conditions 中列出的所有键值对的值的 Collection。
示例
$items = [
['comment' => ['body' => 'cool', 'user' => ['name' => 'Mark']],
['comment' => ['body' => 'very cool', 'user' => ['name' => 'Renan']],
];
$extracted = (new Collection($items))->match(['user.name' => 'Renan']);
// Result will look like this when converted to array
[
['comment' => ['body' => 'very cool', 'user' => ['name' => 'Renan']]]
]
参数
-
array
$conditions 条件的键值列表,其中键是
Collection::extract
接受的属性路径,值是每个元素将与之匹配的条件
返回
self
max() ¶ public
max(callable|string $path, int $sort = SORT_NUMERIC): mixed
根据属性排序后,返回该集合中的最顶层元素。有关回调和 $sort 参数的信息,请查看 sortBy 方法。
示例
// For a collection of employees
$max = $collection->max('age');
$max = $collection->max('user.salary');
$max = $collection->max(function ($e) {
return $e->get('user')->get('salary');
});
// Display employee name
echo $max->name;
参数
-
callable|string
$path 用于排序的列名或返回值的回调。
-
int
$sort optional 排序类型,SORT_STRING、SORT_NUMERIC 或 SORT_NATURAL 之一
返回
mixed
另请参阅
median() ¶ public
median(callable|string|null $path = null): float|int|null
返回使用 $path 或该集合提取的所有值的中间值。
示例
$items = [
['invoice' => ['total' => 400]],
['invoice' => ['total' => 500]]
['invoice' => ['total' => 100]]
['invoice' => ['total' => 333]]
['invoice' => ['total' => 200]]
];
$total = (new Collection($items))->median('invoice.total');
// Total: 333
$total = (new Collection([1, 2, 3, 4]))->median();
// Total: 2.5
空集或 0 行的中位数为 null
。包含 null
值的集合不被视为为空。
参数
-
callable|string|null
$path optional 计算中位数的属性名称或函数。如果未传递任何值,则将使用恒等函数,该函数将返回要计算中位数的属性的值。
返回
float|int|null
min() ¶ public
min(callable|string $path, int $sort = SORT_NUMERIC): mixed
根据属性排序后,返回该集合中的最底层元素。有关回调和 $sort 参数的信息,请查看 sortBy 方法。
示例
// For a collection of employees
$min = $collection->min('age');
$min = $collection->min('user.salary');
$min = $collection->min(function ($e) {
return $e->get('user')->get('salary');
});
// Display employee name
echo $min->name;
参数
-
callable|string
$path 用于排序的列名或返回值的回调。
-
int
$sort optional 排序类型,SORT_STRING、SORT_NUMERIC 或 SORT_NATURAL 之一
返回
mixed
另请参阅
nest() ¶ public
nest(callable|string $idPath, callable|string $parentPath, string $nestingKey = 'children'): self
返回一个新的集合,其中值根据 id 属性路径和父 id 属性路径嵌套在树状结构中。
参数
-
callable|string
$idPath 用于确定元素是否是另一个元素的父级的列名路径
-
callable|string
$parentPath 用于确定元素是否是另一个元素的子级的列名路径
-
string
$nestingKey optional 子级嵌套在其中的键名
返回
self
newCollection() ¶ protected
newCollection(mixed ...$args): Cake\Collection\CollectionInterface
返回一个新的集合。
允许使用此特性的类确定其返回的集合接口的类型。
参数
-
混合
...$args 构造函数参数。
返回
Cake\Collection\CollectionInterface
prepend() ¶ 公共
prepend(iterable $items): self
将一组项目添加到集合的开头,创建一个新的集合。
参数
-
iterable
$items 要添加的项目。
返回
self
prependItem() ¶ 公共
prependItem(mixed $item, mixed $key = null): self
添加一个单独的项目到开头,创建一个新的集合。
参数
-
mixed
$item 要添加的项目。
-
mixed
$key optional 要添加项目的键。如果为 null,将生成一个键。
返回
self
reduce() ¶ 公共
reduce(callable $callback, mixed $initial = null): mixed
将该集合中的值折叠成一个单一的值,作为将回调函数应用于所有元素的结果。$initial 是缩减的初始状态,并且每个后续步骤都应该由回调函数返回。如果省略 $initial,则集合的第一个值将用作其替代,并且缩减将从第二个项目开始。
参数
-
callable
$callback 要调用的回调函数
-
混合
$initial 可选 还原状态
返回
mixed
reject() ¶ 公共
reject(callable $callback = null): self
遍历集合中的每个值,并返回另一个包含所有未通过真值测试的值的集合。这与 filter
相反。
每次执行回调时,它都会按顺序接收当前迭代中元素的值、元素的键和此集合作为参数。
示例
过滤数组中的偶数,最后结果集合中只保留 1 和 3。
$collection = (new Collection([1, 2, 3]))->reject(function ($value, $key) {
return $value % 2 === 0;
});
参数
-
可调用
$callback 可选 接收每个元素的方法,并返回布尔值以指示是否应将其从结果集合中删除。如果为空,则使用过滤掉真值的回调函数。
返回
self
sample() ¶ 公共
sample(int $length = 10): self
返回一个新的集合,其中包含从该集合中随机选择的最多 $length 个元素。
参数
-
int
$length 可选 从集合中随机获取元素的最大数量。
返回
self
some() ¶ 公共
some(callable $callback): bool
如果此集合中的任何值通过回调中提供的真值测试,则返回 true。
回调传递正在测试的元素的值和键,如果测试通过,则应返回 true。
示例
$hasYoungPeople = (new Collection([24, 45, 15]))->some(function ($value, $key) {
return $value < 21;
});
参数
-
callable
$callback 回调函数
返回
bool
sortBy() ¶ 公共
sortBy(callable|string $path, int $order = SORT_DESC, int $sort = SORT_NUMERIC): self
根据将回调函数应用于每个值的结果对该集合中的元素进行排序,返回一个排序的迭代器。参数 $path 也可以是表示列或属性名称的字符串。
回调函数将接收 $items 中每个元素作为其第一个参数,回调函数返回的值将用作对该元素进行排序的值。请注意,回调函数可能对每个元素调用多次。
示例
$items = $collection->sortBy(function ($user) {
return $user->age;
});
// alternatively
$items = $collection->sortBy('age');
// or use a property path
$items = $collection->sortBy('department.name');
// output all user name order by their age in descending order
foreach ($items as $user) {
echo $user->name;
}
参数
-
callable|string
$path 用于排序的列名或返回值的回调。
-
int
$order 可选 排序顺序,可以是 SORT_DESC 或 SORT_ASC
-
int
$sort optional 排序类型,SORT_STRING、SORT_NUMERIC 或 SORT_NATURAL 之一
返回
self
stopWhen() ¶ 公共
stopWhen(callable|array $condition): self
创建一个新的集合,当迭代时,如果提供的条件计算结果为 true,则停止生成结果。
这对处理无限迭代器或在某个点开始返回无效元素的任何生成器很有用。例如,当从文件流中读取行时,您可能希望在达到某个值后停止迭代。
示例
获取 CSV 文件中的一系列行,直到时间戳列小于某个日期。
$lines = (new Collection($fileLines))->stopWhen(function ($value, $key) {
return (new DateTime($value))->format('Y') < 2012;
})
->toArray();
获取元素,直到找到第一个未批准的消息。
$comments = (new Collection($comments))->stopWhen(['is_approved' => false]);
参数
-
可调用|数组
$condition 接收每个元素的方法,并在迭代应停止时返回 true。如果为数组,则将解释为键值条件列表,其中键是
Collection::extract
接受的属性路径,而值是与每个元素匹配的条件。
返回
self
sumOf() ¶ 公共
sumOf(callable|string|null $path = null): float|int
返回使用 $matcher 提取的所有值的总和或此集合的总和。
示例
$items = [
['invoice' => ['total' => 100]],
['invoice' => ['total' => 200]],
];
$total = (new Collection($items))->sumOf('invoice.total');
// Total: 300
$total = (new Collection([1, 2, 3]))->sumOf();
// Total: 6
参数
-
callable|string|null
$path optional 要求和的属性名称或函数。如果未传递值,则将使用身份函数,该函数将返回要求和的属性的值。
返回
浮点数|整数
take() ¶ 公共
take(int $length = 1, int $offset = 0): self
返回一个新集合,该集合包含以创建此集合的内部顺序排列的最多 $length 个元素。如果传递第二个参数,它将确定从哪个位置开始获取元素。
参数
-
int
$length 可选 从集合中获取元素的最大数量。
-
int
$offset 可选 获取元素的位置偏移量。
返回
self
takeLast() ¶ 公共
takeLast(int $length): self
返回集合的最后 N 个元素。
示例
$items = [1, 2, 3, 4, 5];
$last = (new Collection($items))->takeLast(3);
// Result will look like this when converted to array
[3, 4, 5];
参数
-
int
$length 集合末尾的元素数量。
返回
self
through() ¶ 公共
through(callable $callback): self
将此集合作为第一个参数传递给一个可调用对象。这对于使用另一个对象装饰整个集合很有用。
示例
$items = [1, 2, 3];
$decorated = (new Collection($items))->through(function ($collection) {
return new MyCustomCollection($collection);
});
参数
-
callable
$callback 可调用函数,将接收此集合作为第一个参数。
返回
self
toArray() ¶ 公共
toArray(bool $keepKeys = true): array
返回结果的数组表示。
参数
-
bool
$keepKeys optional 是否使用此集合返回的键作为数组键。请记住,迭代器返回同一个键以用于不同的元素是有效的,将此值设置为 false 可以帮助获取所有项目(如果键在结果中并不重要)。
返回
array
transpose() ¶ 公共
transpose(): self
将行和列转置为列和行。
示例
$items = [
['Products', '2012', '2013', '2014'],
['Product A', '200', '100', '50'],
['Product B', '300', '200', '100'],
['Product C', '400', '300', '200'],
]
$transpose = (new Collection($items))->transpose()->toList();
// Returns
// [
// ['Products', 'Product A', 'Product B', 'Product C'],
// ['2012', '200', '300', '400'],
// ['2013', '100', '200', '300'],
// ['2014', '50', '100', '200'],
// ]
返回
self
unfold() ¶ 公共
unfold(callable|null $callback = null): self
创建一个新的集合,其中项目是将转换器函数应用于原始集合中的每个项目生成的项目列表连接起来的。
转换器函数将按顺序接收集合中每个项目的 value 和 key,并且它必须返回一个数组或一个可遍历对象,该对象可以连接到最终结果。
如果未传递转换器函数,则将使用“身份”函数。这在源集合中的每个元素都是要一个接一个地追加的项目列表时非常有用。
示例
$items [[1, 2, 3], [4, 5]];
$unfold = (new Collection($items))->unfold(); // Returns [1, 2, 3, 4, 5]
使用转换器
$items [1, 2, 3];
$allItems = (new Collection($items))->unfold(function ($page) {
return $service->fetchPage($page)->toArray();
});
参数
-
callable|null
$callback optional 可调用函数,将接收集合中的每个项目,并应返回一个数组或可遍历对象
返回
self
unique() ¶ 公共
unique(callable $callback = null): self
循环遍历集合中的每个值,并返回一个新集合,该集合仅包含基于 callback
返回的值的唯一值。
回调函数将 value 作为第一个参数,将 key 作为第二个参数传递。
参数
-
可调用
$callback 可选 接收每个元素的方法,并返回用于确定唯一性的值。
返回
self
unwrap() ¶ 公共
unwrap(): Iterator
返回可以安全遍历而不会丢失任何可能转换的最接近的嵌套迭代器。这主要用于删除只能减慢迭代过程的空 IteratorIterator 包装器。
返回
迭代器
zip() ¶ 公共
zip(iterable ...$items): self
使用它们的位置索引作为参考,将此集合的元素与传递的迭代器中的每个元素组合起来。
示例
$collection = new Collection([1, 2]);
$collection->zip([3, 4], [5, 6])->toList(); // returns [[1, 3, 5], [2, 4, 6]]
参数
-
可迭代
...$items 要压缩的集合。
返回
self
zipWith() ¶ 公共
zipWith(iterable $items, callable $callback): self
使用它们的位置索引作为参考,将此集合的元素与传递的迭代器中的每个元素组合起来。
结果元素将是 $callable 函数的返回值。
示例
$collection = new Collection([1, 2]);
$zipped = $collection->zipWith([3, 4], [5, 6], function (...$args) {
return array_sum($args);
});
$zipped->toList(); // returns [9, 12]; [(1 + 3 + 5), (2 + 4 + 6)]
参数
-
iterable
$items 要压缩的集合。
-
callable
$callback 用于压缩元素在一起的函数。
返回
self