laravel框架 - 集合篇

Laravel Eloquent 通常返回一个集合作为结果,集合包含很多有用的、功能强大的方法。

你可以很方便的对集合进行过滤、修改等操作。

本次教程就一起来看一看集合的常用方法及功能。

你可以使用助手函数 collect将数组转化为集合。

php 复制代码
$data = collect([1, 2, 3]);

1.增加

php 复制代码
$data = collect([1, 2, 3]);
$data->push(3);
//输出
array:4 [▼
  0 => 1
  1 => 2
  2 => 3
  3 => 3
]

$data->put('name','yuan');
//输出
array:4 [▼
  0 => 1
  1 => 2
  2 => 3
  "name" => "yuan"
]

2.修改

php 复制代码
$data = collect([1, 2, 3]);
$data->put(0, 'yuan');
//输出
array:3 [▼
  0 => "yuan"
  1 => 2
  2 => 3
]

3.查询

php 复制代码
#1.根据键值获取
$data = collect([1, 2, 3]);
$res=$data->get(1);
//输出	2

#2.返回第一个元素
$data ->shift();
//输出	1

#3.给定值查询集合,如果找到的话返回对应的键,如果没找到,则返回false
$res=$data->search(3);
//输出	2

#4.严格比较
$res=$data->search(6,true);
//输出	false

#5.转化为数组
$res=$data->toArray();

#6.转化为JSON
$res=$data->toJson();

4.删除

php 复制代码
# 根据键值删除
$res = $data->forget('1');

# 从索引起切除一段后返回
# $collection->splice( <索引>, [ <切片长度> ] );
# 注:性质同 `slice`,不同的地方在于 `slice` 不会更改原有集合
# $collection->splice( <索引>, [ <切片长度> ], [ <切去的要替换成的元素数组> ] );
# 注:传入含有新元素的数组作为第三个参数以取代集合中被移除的元素
$data = collect([1, 2, 3]);
$data->splice(0, 1);
//输出
array:2 [▼
  0 => 2
  1 => 3
]

5.统计

php 复制代码
#1.求个数
$collection->count();

#2.求平均
$collection->avg();
$collection->avg('<键名>'); // 多维

#3.求和
$collection->sum();
$collection->sum('<键名>'); // 多维

#4.求最大值
$collection->max();
$collection->max('<键名>'); // 多维

#5.求最小值
$collection->min();
$collection->min('<键名>'); // 多维

6.筛选

php 复制代码
#1.第一个元素
$collection->first();

#2.最后一个元素
$collection->last();

#3.条件查询
$user = User::all();
$data = collect($user);
$res = $data->first(function ($key, $value) {
     return $key->id > 9;
});
//输出	id>9的数据

#4.多维数组筛选,返回元素
$collection->where( <键名>, <键值>, [ $strict = true ] ); // 默认严格模式
$collection->whereLoose( <键名>, <键值> ); // 宽松模式
$collection->whereIn( <键名>, <键值数组>, [ $strict = true ] ); // 默认严格模式
$collection->whereInLoose( <键名>, <键值数组> ); // 宽松模式
//例:$res = $data->where('id', '>',1);

#5.获取唯一的元素
$collection->unique(); // 一维
$collection->unique( <键名> ); // 多维
$collection->unique( function( $item ){
    return <确定是否唯一的值>;
} );

7.排序

php 复制代码
#1.所有底层数组
$collection->all();

#2.键名重新生成
$collection->values();

#3.返回新的随机排序的集合
$collection->shuffle();

#4.返回新的倒序的集合
$collection->reverse();

#5.返回从索引起的切片
$collection->slice( <索引>, [ <切片长度> ] );
# 注释:索引可以为负数,长度不填默认至最后一个元素

#6.一维集合排序
$collection->sort( [ function( $a, $b ){
    return < -1 | 1 | 0 >;
} ] );
# 注:不传回调函数,则默认由小到大

#7.多维集合排序
$collection->sortBy( <列名> ) // 以某列排序
$collection->sortBy( function( $item, $key ){
    return <参于排序的数>;
} )
# 注:排序从小到大依次为 undefined、字符或字符串、数字、数组对象
#     同为 undefined ,先出现的在前
#     同为 字符或字符串 ,一个字符一个字符比较其 Ascii 码
#     同为 数组或对象 ,比较其元素个数

#8.多维集合排序倒序,性质同 `sortBy`
$collection->sortByDesc();

#9.取指定数量的元素的集合
$collection->take( <数量> );
# 注:数量为负数,表示从末尾取

8.判断

php 复制代码
#1.是否为空
$collection->isEmpty();

#2.是否含有指定值
$collection->contains( <键值> );
$collection->contains( <键名>, <键值> );  // 多维
$collection->contains(function( $key, $value ){
    return <判断条件>
});

#3.是否含有指定的键
$collection->has( <键名> );

9.合并

php 复制代码
#1.集合元素拼接
$collection->implode( <拼接字符> ); // 一维
$collection->implode( <键名>, <拼接字符> ); // 多维中的某列

#2.按个数拆分成多维
$prices = $collection->chunk(3);
$prices->toArray();
输出:
[
    0 => [
        0 => 18,
        1 => 23,
        2 => 65
    ],
    1 => [
        3 => 36,
        4 => 97,
        5 => 43
    ],
    2 => [
        6 => 81
    ]
]

#3.多维合并为一维
$collection->collapse();
# 注:对于 item 不是数组的,会被丢弃

#4.合并键值对(集合值作为键,另一集合或数组作为对应值)
$collection->combine( <值数组> );
# 注:集合与另一集合或集合必须保持相同的元素个数
#     合并结果可能会由于集合有相同的值作为键值而个数减小
#     后出现的会覆盖前面出现的
collect([ 1, 2, '1' ])->combine([ 'a', 'b', 'c' ]);
// [ 1 => 'c', 2 => 'b' ]

#5.索引合并
$collection->zip( <新数组> );
collect([ 1, 2 ])->zip([ 'a', 'b' ]);
// [ [ 1, 'a' ], [ 2, 'b' ] ]

10.遍历

php 复制代码
#1.遍历
$collection->each(function ($value, $key) {
    <...>
});
注:回调函数中,返回 false 会终止遍历

#2.遍历返回,形成新的集合
$collection->map(function ($value, $key) {
    <...>
    return <元素的新值>;

    例子:$value['user_id'] += 1;
    return $value;
});

#3.遍历修改,*直接更改了原有集合*
$collection->transform(function ($value, $key) {
    <...>
    return <元素的新值>;
});

#4.遍历执行回调,最后转为一维集合返回
$collection->flatMap(function( $value, $key ){
    return <新的元素>;
});
# 注:等价于 ->map()->collapse();

#5.集合与数组合并
$collection->union( <数组> );
# 注:若集合与数组具有相同的键名,集合的将会保留,性质类同于 `+`

11.参考链接

php 复制代码
https://www.cnblogs.com/Json159/p/9570903.html
https://learnku.com/laravel/t/27647
相关推荐
JaguarJack1 天前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
后端·php·服务端
BingoGo1 天前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
php
BingoGo2 天前
告别 Laravel 缓慢的 Blade!Livewire Blaze 来了,为你的 Laravel 性能提速
后端·laravel
JaguarJack2 天前
告别 Laravel 缓慢的 Blade!Livewire Blaze 来了,为你的 Laravel 性能提速
后端·php·laravel
郑州光合科技余经理2 天前
代码展示:PHP搭建海外版外卖系统源码解析
java·开发语言·前端·后端·系统架构·uni-app·php
QQ5110082853 天前
python+springboot+django/flask的校园资料分享系统
spring boot·python·django·flask·node.js·php
WeiXin_DZbishe3 天前
基于django在线音乐数据采集的设计与实现-计算机毕设 附源码 22647
javascript·spring boot·mysql·django·node.js·php·html5
longxiangam3 天前
Composer 私有仓库搭建
php·composer
上海云盾-高防顾问3 天前
DNS异常怎么办?快速排查+解决指南
开发语言·php
ShoreKiten3 天前
关于解决本地部署sqli-labs无法安装低版本php环境问题
开发语言·php