laravel框架 - 集合篇

2023-09-16 07:05:38

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

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

本次教程就一起来看一看集合的常用方法及功能。
你可以使用助手函数 collect 将数组转化为集合。

$data = collect([1, 2, 3]);


1.增加

$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.修改

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

3.查询

#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.删除

# 根据键值删除
$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.统计

#1.求个数
$collection->count();

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

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

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

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

6.筛选

#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.排序

#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.判断

#1.是否为空
$collection->isEmpty();

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

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

9.合并

#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.遍历

#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.参考链接

https://www.cnblogs.com/Json159/p/9570903.html
https://learnku.com/laravel/t/27647

更多推荐

yarn的资源优化的调整参数

yarn的资源优化的调整参数官网:https://hadoop.apache.org/docs/r3.3.6/hadoop-yarn/hadoop-yarn-common/yarn-default.xml没事多看官网哈yarn.nodemanager.resource.memory-mb:用于设置NodeManager

解释什么是分布式数据库,列举几种常见的分布式数据库系统

1、什么是敏感信息和隐私保护?解释隐私保护的技术手段。敏感信息和隐私保护是指在收集、存储和使用个人数据时,需要采取一系列措施来保护这些数据的安全和机密性,防止数据被未经授权的第三方访问、使用或泄露。这些措施包括加密、访问控制、数据脱敏、数据加密、隐私政策等。在隐私保护的技术手段方面,常用的技术包括加密和访问控制。加密技

mysql自动删除过期的binlog

一、binlog_expire_logs_seconds配置项mysql8.0使用配置项binlog_expire_logs_seconds设置binlog过期时间,单位为秒。mysql旧版本使用配置项expire_logs_days设置binlog过期时间,单位为天,不方便测试。在8.0使用expire_logs_d

OPTEE Benchmark框架

安全之安全(security²)博客目录导读OPTEE调试技术汇总目录一、序言二、Benchmark框架三、Benchmark实现细节1、设计概况2、时间戳源3、调用时序图4、添加自定义时间戳5、构建并运行Benchmark6、限制和进一步措施一、序言本节中描述的特性依赖于上游不可用的Linuxkernelpatch,

conda手动下载虚拟环境中的包

一.下载导入tar安装包1.准备安装包安装包可从官网下载,或直接拷贝已有虚拟环境中的包【补充】关于虚拟环境中包的存储路径打开cmd,输入condaconfig--show查看pkgs_dirs属性的值C:\Users\XXX>condaconfig--showpkgs_dirs:-D:\program\anaconda

PostgreSQL 事务&并发&锁

文章目录PostgreSQL事务大家都知道的ACID事务的基本使用保存点PostgreSQL并发并发问题MVCCPostgreSQL锁机制表锁行锁总结PostgreSQL事务大家都知道的ACID在日常操作中,对于一组相关操作,通常要求要么都成功,要么都失败。在关系型数据库中,称这一组操作为事务。为了保证整体事务的安全性

软件设计模式系列之十二——外观模式

在软件设计中,经常会遇到需要与复杂子系统进行交互的情况。为了简化客户端与子系统之间的交互,提高系统的可维护性和可用性,外观模式应运而生。外观模式(FacadePattern)是一种结构型设计模式,它提供一个统一的界面,用于访问系统中的一组相关接口,从而隐藏了系统的复杂性。在本文中,我们将深入探讨外观模式,包括其定义、举

员工犯错,就应该受惩罚吗?

先说结论,惩罚肯定是不能有的。我们应该指导员工减少犯错的概率。在项目开发过程中,总会遇到项目成员犯错的场景。根据所犯错误是否具有共性特征,我把问题归为二类,不同类型的错误,采取不同的应对措施。第一类:有共性的问题。第二类:没有共性的问题。共性的定义:一个人多次或者多个人都犯过的错误。第一类:有共性的问题。对于有共性的问

vue3 - 使用reactive定义响应式数据进行赋值时,视图没有改变,值已经改变的解决方案

问题:在Vue3.0中我们使用reactive()定义的响应式数据的时候,当是一个数组或对象时,我们直接进行赋值,发现数据已经修改成功,但是页⾯并没有自动渲染成最新的数据;这是为什么呢?就如同官网所说的reactive存在一些局限性:(官方的描述)原因:原因就是reactive函数会返回一个Proxy包装的对象,所以当

网络安全深入学习第六课——热门框架漏洞(RCE— Weblogic反序列化漏洞)

文章目录一、Weblogic介绍二、Weblogic反序列化漏洞历史三、Weblogic框架特征1、404界面2、登录界面四、weblogic常用弱口令账号密码五、Weblogic漏洞介绍六、Weblogic漏洞手工复现1、获取账号密码,这是一个任意文件读取的漏洞1)读取SerializedSystemIni.dat文

面向对象的分析与设计(精品课程)第二章作业

面向对象的分析与设计(精品课程)第二章作业一.单选题(共4题,30.4分)二.多选题(共1题,7.6分)三.填空题(共5题,38分)四.简答题(共3题,24分)一.单选题(共4题,30.4分)(单选题)UML中的事物包括结构事物、分组事物、注释事物和()。A实体事物B边界事物C控制事物D动作事物(单选题)UML中的4种

热文推荐