当前位置:网站首页>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
边栏推荐
- Sqli-labs customs clearance (less18-less20)
- Atcoder beginer contest 253 F - operations on a matrix / / tree array
- PXC high availability cluster summary
- In depth study of JVM bottom layer (II): hotspot virtual machine object
- Sqli-labs customs clearance (less15-less17)
- Browser scrolling for more implementations
- Cve - 2015 - 1635 (ms15 - 034) réplication de la vulnérabilité d'exécution de code à distance
- flex九宫格布局
- Kotlin - verify whether the time format is yyyy MM DD hh:mm:ss
- Kali latest update Guide
猜你喜欢

SQLI-LABS通关(less18-less20)

js中对于返回Promise对象的语句如何try catch

Latex compiles Chinese in vscode and solves the problem of using Chinese path

Implement strstr() II

How to debug wechat built-in browser applications (enterprise number, official account, subscription number)

Sublime text configuring PHP compilation environment

No process runs when querying GPU, but the video memory is occupied

Linux MySQL 5.6.51 Community Generic 安装教程

CAD二次开发 对象

Go package name
随机推荐
JS delete the last character of the string
SQLI-LABS通关(less18-less20)
Tool grass welfare post
Atcoder beginer contest 253 F - operations on a matrix / / tree array
CVE-2015-1635(MS15-034 )遠程代碼執行漏洞複現
ZZQ的博客目录--更新于20210601
CAD二次开发 对象
Common prototype methods of JS array
浏览器滚动加载更多实现
Latex error: the font size command \normalsize is not defined problem solved
js中map和forEach的用法
[literature reading and thought notes 13] unprocessing images for learned raw denoising
Huawei mindspire open source internship machine test questions
Go common compilation fails
CTF web practice competition
解决微信小程序swiper组件bindchange事件抖动问题
js中map和forEach的用法
SQL injection closure judgment
Latex在VSCODE中编译中文,使用中文路径问题解决
Review of reflection topics