CakePHP
  • 文档
    • 手册
    • API
    • 视频
    • 报告安全问题
    • 隐私政策
    • 标识和商标
  • 商业解决方案
  • 商品
  • 旅行
  • 团队
  • 社区
    • 社区
    • 参与
    • 问题 (Github)
    • 烘焙坊
    • 精选资源
    • 培训
    • 聚会
    • 我的 CakePHP
    • CakeFest
    • 新闻简报
    • 领英
    • YouTube
    • 脸书
    • 推特
    • Mastodon
    • 帮助和支持
    • 论坛
    • Stack Overflow
    • IRC
    • Slack
    • 付费支持
CakePHP

C CakePHP 5.1 Chiffon API

  • 项目
    • CakePHP
      • CakePHP
      • Chronos
      • Elastic Search
      • 队列
  • 版本
    • 5.1
      • 5.1
      • 5.0
      • 4.5
      • 4.4
      • 4.3
      • 4.2
      • 4.1
      • 4.0
      • 3.10
      • 3.9
      • 3.8
      • 3.7
      • 3.6
      • 3.5
      • 3.4
      • 3.3
      • 3.2
      • 3.1
      • 3.0
      • 2.10
      • 2.9
      • 2.8
      • 2.7
      • 2.6
      • 2.5
      • 2.4
      • 2.3
      • 2.2
      • 2.1
      • 2.0
      • 1.3
      • 1.2

命名空间

  • 全局
  • Cake
    • 缓存
    • 集合
      • 迭代器
    • 命令
    • 控制台
    • 控制器
    • 核心
    • 数据库
    • 数据源
    • 错误
    • 事件
    • 表单
    • Http
    • 国际化
    • 日志
    • 邮件
    • 网络
    • ORM
    • 路由
    • 测试套件
    • 工具
    • 验证
    • 视图

类 InsertIterator

此迭代器将在返回的每个记录的属性中插入值。要插入的值来自另一个遍历对象。当您有两个独立的集合,并且希望通过将一个集合中的每个值放置到另一个集合内的属性中来将它们合并在一起时,这很有用。

命名空间: Cake\Collection\Iterator

属性汇总

  • $_path protected
    list<string>

    包含要遍历以到达应插入值的点的每个属性的数组。

  • $_target protected
    string

    将为其分配值的属性名称

  • $_validValues protected
    bool

    保存值集合是否仍然有效。(还有更多记录)

  • $_values protected
    Cake\Collection\Collection

    从中提取要插入的值的集合

方法汇总

  • __construct() public

    构造一个新的集合,该集合将动态地从 $values 中找到的值中添加属性。

  • __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() 后集合将包含的元素数量相同。

  • current() public

    在将源集合中的值插入指定路径后,返回目标集合中的当前元素。

  • 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

    返回一个新集合。

  • next() public

    将光标移到下一条记录

  • optimizeUnwrap() protected

    解包此迭代器并返回最简单的可遍历对象,该对象可用于获取数据

  • prepend() public

    将一组项目添加到集合的开头,创建一个新集合

  • prependItem() public

    添加单个项目,创建一个新集合。

  • reduce() public

    将此集合中的值折叠成单个值,作为将回调函数应用于所有元素的结果。$initial 是约简的初始状态,每个后续步骤都应由回调函数返回。如果省略 $initial,则将使用集合的第一个值代替,约简将从第二个项目开始。

  • reject() public

    查看集合中的每个值,并返回另一个集合,其中包含所有未通过真值测试的值。这与 filter 相反。

  • rewind() public

    重置集合指针。

  • sample() public

    返回一个新集合,其中包含来自此集合的最大 $length 个随机元素

  • shuffle() public

    返回一个新集合,其中元素以随机顺序排列,此函数不会保留集合中的原始键。

  • skip() public

    返回一个新集合,它将跳过迭代开始时指定的数量的元素。

  • some() public

    如果此集合中的任何值通过回调中提供的真值测试,则返回 true。

  • sortBy() public

    从此集合中的元素返回一个排序的迭代器,根据将回调函数应用于每个值的结果进行排序。参数 $path 也可以是一个字符串,表示列或属性名称。

  • stopWhen() public

    创建一个新集合,当迭代时,如果提供的条件计算结果为真,则将停止产生结果。

  • 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 $into, string $path, iterable $values)

构造一个新的集合,该集合将动态地从 $values 中找到的值中添加属性。

参数
iterable $into

目标集合,将在指定的路径中插入值。

string $path

需要遍历以将值插入目标集合的点分隔属性列表。

iterable $values

将从其在指定的路径中插入值的源集合。

__debugInfo() ¶ public

__debugInfo(): array<string, mixed>

返回一个可用于描述此对象内部状态的数组。

返回
array<string, mixed>

__serialize() ¶ public

__serialize(): array

返回一个用于序列化此对象的数组。

返回
array

__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): Cake\Collection\CollectionInterface

创建一个新的集合,该集合是当前集合的笛卡尔积。

为了创建一个笛卡尔积,集合必须包含一维数据。

示例

$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 以使结果成为最终结果的一部分。

返回
Cake\Collection\CollectionInterface
抛出
LogicException

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 可选
返回
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
返回
self

contains() ¶ public

contains(mixed $value): bool

如果 $value 存在于此集合中,则返回 true。比较是按值和类型进行的。

参数
mixed $value
返回
bool

count() ¶ public

count(): int

返回集合中的元素数量。

警告

将改变迭代器的当前位置

在您迭代此集合的同时调用此方法,例如在 foreach 中,会导致未定义的行为。避免这样做。

对于 NoRewindIterator 集合,将消耗所有元素

对于某些类型的集合,调用此方法可能使其在之后变得不可用。也就是说,您可能无法从中获取元素,或无法再对其进行迭代。

具体来说,任何包装了 Generator(带有 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

current() ¶ public

current(): mixed

在将源集合中的值插入指定路径后,返回目标集合中的当前元素。

返回
mixed

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 可选
返回
self

first() ¶ public

first(): mixed

返回此集合中的第一个结果

返回
mixed

firstMatch() ¶ public

firstMatch(array $conditions): mixed

返回与条件中列出的所有键值对匹配的第一个结果。

参数
array $conditions
返回
mixed

groupBy() ¶ public

groupBy(callable|string $path, bool $preserveKeys = false): Cake\Collection\CollectionInterface

将集合分成集合,按将每个值通过回调运行的结果进行分组。如果 $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

用于分组的列名或返回值的回调函数。或者是一个返回提供的元素的分组键的函数

bool $preserveKeys 可选

在对值进行分组时是否保留现有集合的键。默认为 false。

返回
Cake\Collection\CollectionInterface

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

last() ¶ public

last(): mixed

返回此集合中的最后一个结果

返回
mixed

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 可选
callable|string $nestingKey 可选
返回
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
返回
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 可选
返回
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 可选
返回
mixed

nest() ¶ public

nest(callable|string $idPath, callable|string $parentPath, string $nestingKey = 'children'): self

返回一个新集合,其中值基于 id 属性路径和父 id 属性路径嵌套在树状结构中。

参数
callable|string $idPath
callable|string $parentPath
string $nestingKey 可选
返回
self

newCollection() ¶ protected

newCollection(mixed ...$args): Cake\Collection\CollectionInterface

返回一个新集合。

允许使用此特性的类确定它们返回的集合接口的类型

参数
mixed ...$args

构造函数参数。

返回
Cake\Collection\CollectionInterface

next() ¶ public

next(): void

将光标移到下一条记录

返回
void

optimizeUnwrap() ¶ protected

optimizeUnwrap(): Iterator|array

解包此迭代器并返回最简单的可遍历对象,该对象可用于获取数据

返回
Iterator|array

prepend() ¶ public

prepend(mixed $items): self

将一组项目添加到集合的开头,创建一个新集合

参数
mixed $items
返回
self

prependItem() ¶ public

prependItem(mixed $item, mixed $key = null): self

添加单个项目,创建一个新集合。

参数
mixed $item
mixed $key optional
返回
self

reduce() ¶ public

reduce(callable $callback, mixed $initial = null): mixed

将此集合中的值折叠成单个值,作为将回调函数应用于所有元素的结果。$initial 是约简的初始状态,每个后续步骤都应由回调函数返回。如果省略 $initial,则将使用集合的第一个值代替,约简将从第二个项目开始。

参数
callable $callback
mixed $initial 可选
返回
mixed

reject() ¶ public

reject(callable $callback = null): self

查看集合中的每个值,并返回另一个集合,其中包含所有未通过真值测试的值。这与 filter 相反。

每次执行回调函数时,它将按顺序接收当前迭代中元素的值、元素的键和此集合作为参数。

示例

过滤数组中的偶数,最终结果集合中将只有值 1 和 3。

$collection = (new Collection([1, 2, 3]))->reject(function ($value, $key) {
 return $value % 2 === 0;
});
参数
callable $callback 可选
返回
self

rewind() ¶ public

rewind(): void

重置集合指针。

返回
void

sample() ¶ public

sample(int $length = 10): self

返回一个新集合,其中包含来自此集合的最大 $length 个随机元素

参数
int $length 可选
返回
self

shuffle() ¶ public

shuffle(): self

返回一个新集合,其中元素以随机顺序排列,此函数不会保留集合中的原始键。

返回
self

skip() ¶ public

skip(int $length): self

返回一个新集合,它将跳过迭代开始时指定的数量的元素。

参数
int $length
返回
self

some() ¶ public

some(callable $callback): bool

如果此集合中的任何值通过回调中提供的真值测试,则返回 true。

回调函数将传入正在测试的元素的值和键,如果测试通过,则应返回 true。

示例

$hasYoungPeople = (new Collection([24, 45, 15]))->some(function ($value, $key) {
 return $value < 21;
});
参数
callable $callback
返回
bool

sortBy() ¶ public

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 可选
int $sort 可选
返回
self

stopWhen() ¶ public

stopWhen(callable|array $condition): self

创建一个新集合,当迭代时,如果提供的条件计算结果为真,则将停止产生结果。

这对于处理无限迭代器或任何在某个点开始返回无效元素的生成器很有用。例如,当从文件流中读取行时,您可能希望在达到某个值后停止迭代。

示例

获取 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]);
参数
callable|array $condition
返回
self

sumOf() ¶ public

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
返回
float|int

take() ¶ public

take(int $length = 1, int $offset = 0): self

返回一个新集合,其中包含内部顺序创建此集合的最大 $length 个元素。如果传递第二个参数,它将确定从哪个位置开始获取元素。

参数
int $length 可选
int $offset 可选
返回
self

takeLast() ¶ public

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() ¶ public

through(callable $callback): self

将此集合作为第一个参数传递给可调用对象。这对于使用另一个对象装饰整个集合很有用。

示例

$items = [1, 2, 3];
$decorated = (new Collection($items))->through(function ($collection) {
     return new MyCustomCollection($collection);
});
参数
callable $callback
返回
self

toArray() ¶ public

toArray(bool $keepKeys = true): array

返回结果的数组表示形式

参数
bool $keepKeys optional
返回
array

toList() ¶ public

toList(): array

返回结果的数字索引数组表示形式。这等效于调用 toArray(false)

返回
array

transpose() ¶ public

transpose(): Cake\Collection\CollectionInterface

将行和列转置为列和行

示例

$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'],
// ]
返回
Cake\Collection\CollectionInterface
抛出
LogicException

unfold() ¶ public

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 可选
返回
self

unique() ¶ public

unique(callable $callback = null): self

循环遍历集合中的每个值,并返回一个新集合,其中仅包含基于 callback 返回的值的唯一值。

回调函数将 value 作为第一个参数,将 key 作为第二个参数传递。

参数
callable $callback 可选
返回
self

unwrap() ¶ public

unwrap(): Iterator

返回最接近的嵌套迭代器,可以安全地遍历而不丢失任何可能的转换。这主要用于删除可能只会减慢迭代过程的空 IteratorIterator 包装器。

返回
迭代器

zip() ¶ public

zip(iterable ...$items): self

使用它们的位置索引作为参考,将此集合的元素与传递的迭代器的每个元素组合。

示例

$collection = new Collection([1, 2]);
$collection->zip([3, 4], [5, 6])->toList(); // returns [[1, 3, 5], [2, 4, 6]]
参数
iterable ...$items
返回
self

zipWith() ¶ public

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

属性详情

$_path ¶ protected

包含要遍历以到达应插入值的点的每个属性的数组。

类型
list<string>

$_target ¶ protected

将为其分配值的属性名称

类型
string

$_validValues ¶ protected

保存值集合是否仍然有效。(还有更多记录)

类型
bool

$_values ¶ protected

从中提取要插入的值的集合

类型
Cake\Collection\Collection
OpenHub
Pingping
Linode
  • 商业解决方案
  • 展示
  • 文档
  • 手册
  • API
  • 视频
  • 报告安全问题
  • 隐私政策
  • 标识和商标
  • 社区
  • 参与
  • 问题 (Github)
  • 烘焙坊
  • 精选资源
  • 培训
  • 聚会
  • 我的 CakePHP
  • CakeFest
  • 新闻简报
  • 领英
  • YouTube
  • 脸书
  • 推特
  • Mastodon
  • 帮助和支持
  • 论坛
  • Stack Overflow
  • IRC
  • Slack
  • 付费支持

使用 CakePHP API 文档 生成