【PHP】.Hyperf 框架-collection 集合数据(内置函数归纳-实用版)

发布于:2025-07-03 ⋅ 阅读:(23) ⋅ 点赞:(0)
📌 Article::query()->where('article_id', 6)->select()->first()
  1. ✍️ 进行数据结果的循环,遍历
1.each()
方法遍历集合中的项目并将每个项目传递给闭包,进行处理数据
Article::query()->get()->each(function ($item) {
    // 可以直接执行sql 数据
    $item->content = str_replace('<img', '<img style="max-width:100%"', $item->content);
    $item->save();
    // 不可以直接进行数据的格式化
    
});

2.map()
该 map 方法遍历集合并将每一个值传入给定的回调函数。该回调函数可以任意修改集合项并返回,从而生成被修改过集合项的新集合(要有接收变量。它不会更改原数据)

Article::query()->get()->map(function ($item, $key) {
    $item->created_at = strtotime($item->created_at);
});

💡 但其实我觉得都不好用。还不如直接toArray(),再用foreach。有的时候情况比较复杂
需要多个条件,进行数据分析。比如一个班的学生。要求获取性别分类。年龄分类。我觉得一个循环就够了。没有必要多次调用这些
遍历方法进行遍历获取。当然 如果说 闭包中使用引用。那就当我没说


$groupBySex = []
$groupByAge = []

Article::query()->get()->map(function ($item, $key) use(&$groupBySex, &$groupByAge) {
    $item->created_at = strtotime($item->created_at);
    if ( $item->sex === '男' ) {
            $groupBySex['boy'] = $item
    }
    else {
            $groupByAge['sex'] = $item
    }
});

2.✍️ 对数据进行分组(还行挺实用的)

1.groupby
Article::query()->get()->groupBy('article_id')
// 將id提取出来作为Key
[
        'account-x10' => [
            ['account_id' => 'account-x10', 'product' => 'Chair'],
            ['account_id' => 'account-x10', 'product' => 'Bookcase'],
        ],
        'account-x11' => [
            ['account_id' => 'account-x11', 'product' => 'Desk'],
        ],
    ]
2. keyby
Article::query()->get()->keyby('article_id')
// 将article_id 提取出来作为key

keyBy 和 groupBy 主要的区别在于,如果说遇到相同重复的key 的时候。 keyBy会用最新的。 groupBy 会保留,在同一个键值数组内作为一维数组
$collection = collect([
    ['product' => 'Desk', 'price' => 200],
    ['product' => 'Chair', 'price' => 100],
    ['product' => 'Desk', 'price' => 150]
]);

$grouped = $collection->groupBy('product');
$keyed = $collection->keyBy('product');

/*
[
    'Desk' => [
        ['product' => 'Desk', 'price' => 200],
        ['product' => 'Desk', 'price' => 150]
    ],
    'Chair' => [
        ['product' => 'Chair', 'price' => 100]
    ]
]
*/

/*
[
    'Desk' => ['product' => 'Desk', 'price' => 150],
    'Chair' => ['product' => 'Chair', 'price' => 100]
]
*/

3.✍️ 将获得的数据二维变一维 (也挺实用的)

1. flatten
将数据从二维变成一维。
$collection = collect([
    'name' => 'taylor',
    'languages' => [
        'php', 'javascript'
    ]
]);

$flattened = $collection->flatten();

$flattened->all();

// ['taylor', 'php', 'javascript'];

场景 比如获取多条记录的id值后。直接将这些id,直接展开
Article::query()->select(['id'])->get()->flatten();// 就能得到[1,2,3,4,5,6]

4.✍️ 获取集合内的某一列的数据

1. pluck
该 pluck 可以获取集合中指定键对应的所有值:
$collection = collect([
    ['product_id' => 'prod-100', 'name' => 'Desk'],
    ['product_id' => 'prod-200', 'name' => 'Chair'],
]);

$plucked = $collection->pluck('name');

$plucked->all();

// ['Desk', 'Chair']

5.✍️ 直接排序(有的时候有用)但很多情况数据库数据 就直接用 order() 排序。直接排序了

1. sortBy
Article::query()->sortBy('views')
Article::query()->sortBy('point')

6.✍️ 创建collection(初始化)

$collection = Collection::wrap('John Doe');

💡 其他的使用不怎么竟然用的到。如果很复杂的。可能更喜欢使用toArray() 转化成为数组使用


网站公告

今日签到

点亮在社区的每一天
去签到