【PHP】.Hyperf 框架-collection 集合数据(内置函数归纳-实用版)
📌 Article::query()->where('article_id', 6)->select()->first()
- ✍️ 进行数据结果的循环,遍历
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 提取出来作为keykeyBy 和 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() 转化成为数组使用