作者:陈业贵 华为云 云享专家
文章目录
二、理解步骤:
- 二、理解步骤:
-
- 2.整块程序:
第一种情况:这个要删除的分类其下有子分类,要删除先删除子分类先. 举个例子:顶级分类服装 其下有衣服 其下下还有耐克 如果要删除顶级分类服装咋整。 第一步:判断它是否为空。如果为空,代表什么都没做。不理会。 第一步:获取要删除的分类的id。 第三步:先找出无限极分类所有的分类,然后通过算法找到这个服装分类其下有没有子分类。有的话,返回服装所有的子分类回来。 第四步:转换成数组格式遍历下。遍历的作用就是删除服装其下的所有子类。 第五步:遍历删除完服装其下所有子类,在删除服装这个分类。
2.整块程序:代码如下(示例):
```php public function del($id=''){ //如果分类id是空,则跳转到列表页面 if ($id=='') { $this->redirect('category/index'); } //根据id找到当前的记录 $category = Db::name('Category')->find($id); //先找出所有分类,再根据id循环 $categorys = Db::name('Category')->field('id,parent_id')->select(); $category_model = new Categorys(); $cateStr = $category_model->getChildrenIdStr($categorys,$id); $cate_list=explode(',',$cateStr); foreach ($cate_list as $k => $v) { Db::name('category')->where('id',$v)->delete(); } Db::name('category')->where('id',$id)->delete(); return redirect('index'); }
//由父类id得到全部子类,返回字符串 public function getChildrenIdStr($cate_list,$parent_id=0){ static $str=''; foreach ($cate_list as $k => $v) {//遍历无限极分类 if ($v['parent_id']==$parent_id) {//如果这个分类是顶级分类的话, $str =$str.','.$v['id'];//就把其下的子类一次一次的遍历赋值给$str $this->getChildrenIdStr($cate_list,$v['id']);//无线极分类所有的分类,服装下的子类(衣服)。$v['id']的意思是记住一句话。顶级分类的id(服装)等于其下的子类(衣服)的pid。 } } $str=ltrim($str,',');//去掉左边所有的空格,以逗号分隔 $str=rtrim($str,',');//去掉右边所有的空格,以逗号分隔 //print_r($str); return $str; }