当前位置:网站首页>php中通过集合collect的方法来实现把某个值插入到数组中指定的位置
php中通过集合collect的方法来实现把某个值插入到数组中指定的位置
2022-07-02 06:23:00 【夜空の雪風】
需求分析
最近在项目开发的过程中遇到列表中的排序要求按照能上下拖动的方式进行重新排序,例如:A,B,C,D,E。现在要把F插入到C后边,然后按照A,B,C,F,D,E进行排序。
解决方案
经过各种方法的尝试,发现通过集合collect中的一些方法可以快速的实现这个功能。
Thinkphp框架中和PHP原生项目可以直接通过composer安装。Laravel8中自带集合Illuminate\Support\Collection方法而可以直接进行使用。
//安装集合collect方法
composer require tightenco/collect
默认安装的为最新版本的安装包。
代码演示
/** * 实现在数组中的指定元素的前、后插入指定的值。 * @param [type] $sort 被插入的数组数据 * @param [type] $move_sort 要插入的元素 * @param [type] $choose_sort 被插入的元素 * @param [type] $type 1前方插入,2后方插入 * @return void */
function sort_edit($sort, $move_sort, $choose_sort, $type)
{
$sortCollection = collect($sort);
$index = $sortCollection->search($choose_sort);
[$left, $right] = $sortCollection->filter(function ($item) use ($move_sort) {
return $item != $move_sort;
})
->partition(function ($item, $key) use ($index, $type) {
if ($type == 1) {
return $key < $index;
} else {
return $key <= $index;
}
});
$left->push($move_sort);
return $left->values()->merge($right->values());
}
使用方法
$sort = [1, 2, 3, 4, 5, 6, 7, 8];
$move_sort = 9;
$choose_sort = 3;
$type = 2;
sort_edit($sort, $move_sort, $choose_sort, $type)
结果演示
9排到了3的后边
{
"status": 200,
"message": "操作成功",
"data": [
1,
2,
3,
9,
4,
5,
6,
7,
8
]
}
方法分析
search 方法在集合中搜索给定的值并返回它的键。如果没有找到,则返回 false 。
filter 方法使用给定的回调函数过滤集合,只保留那些通过指定条件测试的集合项。
partition 是可以和 PHP 的 list 方法配合使用,利用回调返回是否为真来分开通过指定条件的元素以及那些不通过指定条件的元素。
附上集合文档。https://learnku.com/docs/laravel/8.x/collections/9390
边栏推荐
- Sentry搭建和使用
- Fe - wechat applet - Bluetooth ble development research and use
- Sqli labs customs clearance summary-page3
- AWD learning
- The win10 network icon disappears, and the network icon turns gray. Open the network and set the flash back to solve the problem
- SQLI-LABS通关(less1)
- Flex Jiugongge layout
- How to try catch statements that return promise objects in JS
- Use of interrupt()
- Uploading attachments using Win32 in Web Automation
猜你喜欢

Utilisation de la carte et de foreach dans JS

SQLI-LABS通关(less6-less14)

解决微信小程序swiper组件bindchange事件抖动问题

Build learning tensorflow

2021-07-05C#/CAD二次开发创建圆弧(4)

The use of regular expressions in JS

如何调试微信内置浏览器应用(企业号、公众号、订阅号)

Sqli-labs customs clearance (less6-less14)

Uploading attachments using Win32 in Web Automation

table 组件指定列合并行方法
随机推荐
Latex compilation error I found no \bibstyle &\bibdata &\citation command
There are multiple good constructors and room will problem
搭建frp进行内网穿透
js数组的常用的原型方法
Fe - use of weex development weex UI components and configuration use
js把一个数组分割成每三个一组
20201002 vs 2019 qt5.14 developed program packaging
Win10: add or delete boot items, and add user-defined boot files to boot items
JS delete the last character of the string
Review of reflection topics
Utilisation de la carte et de foreach dans JS
Sqli labs customs clearance summary-page4
Stress test modification solution
Underlying mechanism mvcc
Latex warning: citation "*****" on page y undefined on input line*
DeprecationWarning: . ix is deprecated. Please use. loc for label based indexing or. iloc for positi
由于不正常断电导致的unexpected inconsistency;RUN fsck MANUALLY问题已解决
In depth study of JVM bottom layer (II): hotspot virtual machine object
JS divides an array into groups of three
unittest. Texttestrunner does not generate TXT test reports