php中通过集合collect的方法来实现把某个值插入到数组中指定的位置

需求分析

最近在项目开发的过程中遇到列表中的排序要求按照能上下拖动的方式进行重新排序,例如: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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值