当前位置:网站首页>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
边栏推荐
- 如何调试微信内置浏览器应用(企业号、公众号、订阅号)
- Log - 7 - record a major error in missing documents (A4 paper)
- [literature reading and thought notes 13] unprocessing images for learned raw denoising
- Wechat applet Foundation
- AWD learning
- Stack (linear structure)
- Promise中有resolve和无resolve的代码执行顺序
- JS to determine whether there is a value in the object in the array
- Win电脑截图黑屏解决办法
- Linux MySQL 5.6.51 community generic installation tutorial
猜你喜欢

js中map和forEach的用法

Unexpected inconsistency caused by abnormal power failure; Run fsck manually problem resolved

Self study table Au

查询GPU时无进程运行,但是显存却被占用了

SQLI-LABS通关(less15-less17)

QQ email cannot receive the email sent by Jenkins using email extension after construction (timestamp or auth...)

由於不正常斷電導致的unexpected inconsistency;RUN fsck MANUALLY問題已解决

Explanation and application of annotation and reflection

Huawei mindspire open source internship machine test questions
![[Zhang San learns C language] - deeply understand data storage](/img/b5/cf0bfae8eacf335d3c350c9cbadb87.png)
[Zhang San learns C language] - deeply understand data storage
随机推荐
DeprecationWarning: . ix is deprecated. Please use. loc for label based indexing or. iloc for positi
Fe - wechat applet - Bluetooth ble development research and use
【文献阅读与想法笔记13】 Unprocessing Images for Learned Raw Denoising
Brief analysis of PHP session principle
Win10:添加或者删除开机启动项,在开机启动项中添加在用户自定义的启动文件
解决微信小程序swiper组件bindchange事件抖动问题
20201025 visual studio2019 qt5.14 use of signal and slot functions
Solution to the black screen of win computer screenshot
MySQL中的正则表达式
Atcoder beginer contest 253 F - operations on a matrix / / tree array
如何调试微信内置浏览器应用(企业号、公众号、订阅号)
Sentry construction and use
AWD learning
Tool grass welfare post
Queue (linear structure)
Improve user experience defensive programming
Wechat applet Foundation
In depth study of JVM bottom layer (V): class loading mechanism
Fe - use of weex development weex UI components and configuration use
Eggjs -typeorm treeenity practice