当前位置:网站首页>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
边栏推荐
- 2020-9-23 use of QT timer qtimer class.
- JS delete the last bit of the string
- sqli-labs通关汇总-page2
- Latex 报错 LaTeX Error: The font size command \normalsize is not defined问题解决
- php中根据数字月份返回月份的英文缩写
- js把一个数组分割成每三个一组
- There are multiple good constructors and room will problem
- Présence d'une panne de courant anormale; Problème de gestion de la fsck d'exécution résolu
- 20210306 reprint how to make TextEdit have background pictures
- Apt command reports certificate error certificate verification failed: the certificate is not trusted
猜你喜欢
Linux MySQL 5.6.51 community generic installation tutorial
Date time API details
Latex warning: citation "*****" on page y undefined on input line*
The default Google browser cannot open the link (clicking the hyperlink does not respond)
SQLI-LABS通关(less1)
apt命令报证书错误 Certificate verification failed: The certificate is NOT trusted
Sublime text configuring PHP compilation environment
Latex 编译报错 I found no \bibstyle & \bibdata & \citation command
Sqli - Labs Clearance (less6 - less14)
SQLI-LABS通关(less18-less20)
随机推荐
The table component specifies the concatenation parallel method
Kali latest update Guide
JS judge whether the object is empty
QQ email cannot receive the email sent by Jenkins using email extension after construction (timestamp or auth...)
In depth study of JVM bottom layer (II): hotspot virtual machine object
20201025 visual studio2019 qt5.14 use of signal and slot functions
Latex 报错 LaTeX Error: The font size command \normalsize is not defined问题解决
Implement strstr() II
PgSQL learning notes
Differences between ts and JS
flex九宫格布局
Flex Jiugongge layout
Eggjs -typeorm treeenity practice
在php的开发环境中如何调取WebService?
CTF three count
MySQL中的正则表达式
JS create a custom JSON array
Fe - weex uses a simple encapsulated data loading plug-in as the global loading method
Utilisation de la carte et de foreach dans JS
Pytest (2) mark function