📅  最后修改于: 2023-12-03 15:17:17.003000             🧑  作者: Mango
Laravel 集合是在 PHP 原生数组的基础上进一步封装的数据结构。它提供了一系列强大的方法进行数据过滤、排序、分组、合并、映射和归约等操作,使得开发者能够更加高效地进行数据处理。
可以使用 collect
函数来创建集合:
$collection = collect([1, 2, 3, 4, 5]);
也可以使用 new Collection
来创建一个空集合:
$collection = new Collection;
以下是 Laravel 集合提供的常用方法:
| 方法 | 描述 |
| --- | --- |
| all
| 返回集合所有元素 |
| avg
| 返回集合所有元素的平均值 |
| count
| 返回集合元素数量 |
| first
| 返回集合的第一个元素 |
| last
| 返回集合的最后一个元素 |
| isEmpty
| 判断集合是否为空 |
| isNotEmpty
| 判断集合是否不为空 |
| toArray
| 返回集合转换成的数组 |
| toJson
| 返回集合转换成的 JSON 字符串 |
| 方法 | 描述 |
| --- | --- |
| filter
| 过滤集合元素,返回符合条件的元素 |
| reject
| 过滤集合元素,返回不符合条件的元素 |
| where
| 根据条件过滤集合元素 |
| whereIn
| 根据条件过滤集合元素,条件为数组 |
| whereBetween
| 根据条件过滤集合元素,条件为范围 |
| whereNotBetween
| 根据条件过滤集合元素,条件为不在范围内 |
| 方法 | 描述 |
| --- | --- |
| sort
| 对集合元素进行升序排序 |
| sortBy
| 根据指定键对集合进行升序排序 |
| sortByDesc
| 根据指定键对集合进行降序排序 |
| reverse
| 反转集合元素顺序 |
| 方法 | 描述 |
| --- | --- |
| groupBy
| 根据指定键对集合元素进行分组 |
| keyBy
| 将集合的值重新设置键 |
| mapToGroups
| 根据回调函数的返回值对集合元素进行分组 |
| 方法 | 描述 |
| --- | --- |
| concat
| 连接两个集合 |
| merge
| 合并两个集合 |
| union
| 对两个集合进行并集操作 |
| 方法 | 描述 |
| --- | --- |
| map
| 对集合元素进行映射 |
| flatMap
| 对集合元素进行映射,返回扁平化后的数组 |
| pluck
| 获取集合中指定键的值,返回值的集合 |
| transform
| 对集合元素进行修改 |
| 方法 | 描述 |
| --- | --- |
| reduce
| 将集合元素归约为单个值 |
| each
| 对集合元素进行迭代 |
| tap
| 使用回调函数调用集合实例,返回调用的集合实例 |
以上仅是 Laravel 集合提供的部分方法,更多方法可以查看官方文档。
下面是一些使用 Laravel 集合的示例:
// 过滤集合中的奇数元素
$collection = collect([1, 2, 3, 4, 5]);
$evenNumbers = $collection->filter(function ($value) {
return $value % 2 == 0;
});
// 按指定键对集合进行排序
$collection = collect([
['name' => 'John', 'age' => 30],
['name' => 'Jane', 'age' => 25],
['name' => 'Alex', 'age' => 35],
]);
$sorted = $collection->sortBy('age');
// 获取集合中指定键的值
$collection = collect([
['name' => 'John', 'age' => 30],
['name' => 'Jane', 'age' => 25],
['name' => 'Alex', 'age' => 35],
]);
$names = $collection->pluck('name');
// 对集合元素进行迭代
$collection = collect([1, 2, 3, 4, 5]);
$collection->each(function ($value) {
echo $value;
});
// 将集合元素归约为单个值
$collection = collect([1, 2, 3, 4, 5]);
$total = $collection->reduce(function ($carry, $value) {
return $carry + $value;
}, 0);