php批量删除

   批量删除是一个很常见的功能,尤其是对于那种有无限级分类的,比如常用的批量删除栏目,在删除父级栏目的时候还需要删除这个栏目下的子栏目。

  今天耐不住寂寞搞了一把,基本上自己想要实现的效果实现了,先来看一下页面吧



点击全选之后的效果:


在这里有一个小技巧:复选框的name,value值的设置,我在这里将name,value分别设置为name=item[],value=栏目对应的id,这样提交过去之后可以直接通过循环根据栏目的id进行删除

代码如下:

<td align="center">
    <label>
        <input type="checkbox" class="inverted" name="item[]" value="{$vo.id}">
        <span class="text"></span>
    </label>
</td>

后台处理方法:

// 栏目排序&批量删除
public function bdel_sort() {
    if(request()->isPost()) {
        $data = input('post.');
        if(isset($data['item'])) {
            //栏目批量删除
            foreach ($data['item'] as $k=>$v) {
                $childrenidsarr[] = model('cate')->delCatetrees($v);
                $childrenidsarr[] = (int)$v;
            }

            // 将数组中重复的去掉 ,1.将二维数组变成一维数组
            $_childrenidsarr = array();
            foreach ($childrenidsarr as $k=>$v) {
                if(is_array($v)) {
                    foreach ($v as $kk=>$vv) {
                        $_childrenidsarr[] = $vv;
                    }
                }else {
                    $_childrenidsarr[] = $v;
                }
            }
            // 2.去除重复的元素
            $_childrenidsarrs= array_unique($_childrenidsarr);
            $del = db('cate')->delete($_childrenidsarrs);
            if($del) {
                $this->success('批量删除栏目成功',url('lists'));
            }else {
                $this->error('批量删除栏目失败');
            }
        }else {
            // 栏目排序
            foreach ($data['sorts'] as $k=>$v) {
                db('cate')->where('id',$k)->update(['sorts'=>$v]);
            }
            $this->success('栏目排序成功',url('lists'));
        }
        return;
    }
}
还有一个重要的步骤就是如何去查找单个栏目的子栏目,这里需要需要使用递归的方法:

列入单个删除某一个栏目的时候我们把这个栏目的id传入进去,代码如下(在这里我把查找子栏目的方法放在了模型了,对于比较复杂的数据处理放在模型里面比较方便):

model('cate')->delCatetrees($cateid);
// 删除无限级栏目
public function delCatetrees($cateid) {
    $data = $this->select();
    return $this->delcateChildren($data,$cateid);
}

public function delcateChildren($data,$cateid) {
    static $arr = array();
    foreach ($data as $k=>$v) {
        if($cateid == $v['pid']) {
            $arr[] = $v['id'];
            $this->delcateChildren($data,$v['id']);
        }
    }
    return $arr;
}


还有一点值的注意的时候当返回的时候别忘了把当前删除的栏目id也放到返回的数组里面,因为前面只是找到了关于这个栏目的子栏目。



截图是另一个比较重要的步骤,我把返回的所有的栏目id以及子栏目的id全部放到了一个数组中,但是发现会出现重复,这个是不可避免的,所以在下面写了一个内部嵌套的循环方法,先把返回的二维数组变成一维数组,然后在使用array_unique()函数去掉重复的元素,此时我们所得到的元素就是需要删除的栏目id以及他下面的子栏目的id

直接实例化数据模型,使用delete方法实施删除操作就行了。




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值