• laravel框架 - 集合篇


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

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

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

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


    1.增加

    1. $data = collect([1, 2, 3]);
    2. $data->push(3);
    3. //输出
    4. array:4 [▼
    5. 0 => 1
    6. 1 => 2
    7. 2 => 3
    8. 3 => 3
    9. ]
    10. $data->put('name','yuan');
    11. //输出
    12. array:4 [▼
    13. 0 => 1
    14. 1 => 2
    15. 2 => 3
    16. "name" => "yuan"
    17. ]

    2.修改

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

    3.查询

    1. #1.根据键值获取
    2. $data = collect([1, 2, 3]);
    3. $res=$data->get(1);
    4. //输出 2
    5. #2.返回第一个元素
    6. $data ->shift();
    7. //输出 1
    8. #3.给定值查询集合,如果找到的话返回对应的键,如果没找到,则返回false
    9. $res=$data->search(3);
    10. //输出 2
    11. #4.严格比较
    12. $res=$data->search(6,true);
    13. //输出 false
    14. #5.转化为数组
    15. $res=$data->toArray();
    16. #6.转化为JSON
    17. $res=$data->toJson();

    4.删除

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

    5.统计

    1. #1.求个数
    2. $collection->count();
    3. #2.求平均
    4. $collection->avg();
    5. $collection->avg('<键名>'); // 多维
    6. #3.求和
    7. $collection->sum();
    8. $collection->sum('<键名>'); // 多维
    9. #4.求最大值
    10. $collection->max();
    11. $collection->max('<键名>'); // 多维
    12. #5.求最小值
    13. $collection->min();
    14. $collection->min('<键名>'); // 多维

    6.筛选

    1. #1.第一个元素
    2. $collection->first();
    3. #2.最后一个元素
    4. $collection->last();
    5. #3.条件查询
    6. $user = User::all();
    7. $data = collect($user);
    8. $res = $data->first(function ($key, $value) {
    9. return $key->id > 9;
    10. });
    11. //输出 id>9的数据
    12. #4.多维数组筛选,返回元素
    13. $collection->where( <键名>, <键值>, [ $strict = true ] ); // 默认严格模式
    14. $collection->whereLoose( <键名>, <键值> ); // 宽松模式
    15. $collection->whereIn( <键名>, <键值数组>, [ $strict = true ] ); // 默认严格模式
    16. $collection->whereInLoose( <键名>, <键值数组> ); // 宽松模式
    17. //例:$res = $data->where('id', '>',1);
    18. #5.获取唯一的元素
    19. $collection->unique(); // 一维
    20. $collection->unique( <键名> ); // 多维
    21. $collection->unique( function( $item ){
    22. return <确定是否唯一的值>;
    23. } );

    7.排序

    1. #1.所有底层数组
    2. $collection->all();
    3. #2.键名重新生成
    4. $collection->values();
    5. #3.返回新的随机排序的集合
    6. $collection->shuffle();
    7. #4.返回新的倒序的集合
    8. $collection->reverse();
    9. #5.返回从索引起的切片
    10. $collection->slice( <索引>, [ <切片长度> ] );
    11. # 注释:索引可以为负数,长度不填默认至最后一个元素
    12. #6.一维集合排序
    13. $collection->sort( [ function( $a, $b ){
    14. return < -1 | 1 | 0 >;
    15. } ] );
    16. # 注:不传回调函数,则默认由小到大
    17. #7.多维集合排序
    18. $collection->sortBy( <列名> ) // 以某列排序
    19. $collection->sortBy( function( $item, $key ){
    20. return <参于排序的数>;
    21. } )
    22. # 注:排序从小到大依次为 undefined、字符或字符串、数字、数组对象
    23. # 同为 undefined ,先出现的在前
    24. # 同为 字符或字符串 ,一个字符一个字符比较其 Ascii 码
    25. # 同为 数组或对象 ,比较其元素个数
    26. #8.多维集合排序倒序,性质同 `sortBy`
    27. $collection->sortByDesc();
    28. #9.取指定数量的元素的集合
    29. $collection->take( <数量> );
    30. # 注:数量为负数,表示从末尾取

    8.判断

    1. #1.是否为空
    2. $collection->isEmpty();
    3. #2.是否含有指定值
    4. $collection->contains( <键值> );
    5. $collection->contains( <键名>, <键值> ); // 多维
    6. $collection->contains(function( $key, $value ){
    7. return <判断条件>
    8. });
    9. #3.是否含有指定的键
    10. $collection->has( <键名> );

    9.合并

    1. #1.集合元素拼接
    2. $collection->implode( <拼接字符> ); // 一维
    3. $collection->implode( <键名>, <拼接字符> ); // 多维中的某列
    4. #2.按个数拆分成多维
    5. $prices = $collection->chunk(3);
    6. $prices->toArray();
    7. 输出:
    8. [
    9. 0 => [
    10. 0 => 18,
    11. 1 => 23,
    12. 2 => 65
    13. ],
    14. 1 => [
    15. 3 => 36,
    16. 4 => 97,
    17. 5 => 43
    18. ],
    19. 2 => [
    20. 6 => 81
    21. ]
    22. ]
    23. #3.多维合并为一维
    24. $collection->collapse();
    25. # 注:对于 item 不是数组的,会被丢弃
    26. #4.合并键值对(集合值作为键,另一集合或数组作为对应值)
    27. $collection->combine( <值数组> );
    28. # 注:集合与另一集合或集合必须保持相同的元素个数
    29. # 合并结果可能会由于集合有相同的值作为键值而个数减小
    30. # 后出现的会覆盖前面出现的
    31. collect([ 1, 2, '1' ])->combine([ 'a', 'b', 'c' ]);
    32. // [ 1 => 'c', 2 => 'b' ]
    33. #5.索引合并
    34. $collection->zip( <新数组> );
    35. collect([ 1, 2 ])->zip([ 'a', 'b' ]);
    36. // [ [ 1, 'a' ], [ 2, 'b' ] ]

    10.遍历

    1. #1.遍历
    2. $collection->each(function ($value, $key) {
    3. <...>
    4. });
    5. 注:回调函数中,返回 false 会终止遍历
    6. #2.遍历返回,形成新的集合
    7. $collection->map(function ($value, $key) {
    8. <...>
    9. return <元素的新值>;
    10. 例子:$value['user_id'] += 1;
    11. return $value;
    12. });
    13. #3.遍历修改,*直接更改了原有集合*
    14. $collection->transform(function ($value, $key) {
    15. <...>
    16. return <元素的新值>;
    17. });
    18. #4.遍历执行回调,最后转为一维集合返回
    19. $collection->flatMap(function( $value, $key ){
    20. return <新的元素>;
    21. });
    22. # 注:等价于 ->map()->collapse();
    23. #5.集合与数组合并
    24. $collection->union( <数组> );
    25. # 注:若集合与数组具有相同的键名,集合的将会保留,性质类同于 `+`

    11.参考链接

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

  • 相关阅读:
    Socket网络编程(五)——TCP数据发送与接收并行
    越南黑客使用新的Delphi动力恶意软件瞄准印度营销人员
    nginx常用优化
    springboot+基层慢性病信息管理系统 毕业设计-附源码221550
    BufferedReader和BufferedWriter的实现原理
    快来!!!学弟的这篇结构体让学姐老脸一红!!!
    六、不root不magisk不xposed lsposed frida原生修改定位
    MySQL的group by与count(), *字段使用问题
    mybatis在spring中的执行流程
    【力扣练习题】加一
  • 原文地址:https://blog.csdn.net/qq_20869933/article/details/132914208