递归删除一个节点以及该节点下的所有节点示例


Posted in PHP onMarch 19, 2014

有的时候删除信息的时候,需要把这条信息下的所有的都删除,这个时候就需要递归删除了。下面是我在做部门管理中的删除部门功能的时候写的一段递归删除一个部门以及它的所有子部门的一段代码。仅供大家参考和自己以后备用。

下面是我的一段代码的展示:

/* 
* 修改一条部门信息 
*/ 
function del($bumen_id){ 
$sql="select bumen_id from lxsm_bumen where topbumen_id=".$bumen_id; //查询以topbumen_id为$bumen_id的bumen_id 
$delsql="delete from lxsm_bumen where bumen_id=".$bumen_id; //删除bumen_id为$bumen_id的部门信息 
$xiaji_id=$this->DB->fetch_assoc($sql); 
if($xiaji_id){ 
foreach($xiaji_id as $id){ 
$res=$this->del($id[bumen_id]); 
} 
} 
$result=$this->DB->query($delsql); 
if($result){ 
return true; 
} 
else{ 
return false; 
} 
}

注释:这里的topbumen_id是部门信息中的上级部门的id号,fetch_assoc()函数是自己已经封装好的函数,是把查询得到的所有内容返回成一个数组。

心得体会:这是自己第一次写递归算法,写得还很稚嫩,不管怎样功能是实现了。我感觉写递归方面的代码的时候,自己先画好一个树状结构,认清其结构后,根据自己想要得到的效果,先在脑子里模拟一步一步的执行。比如这里的删除,想要删除一个部门,就得删除自己并且查找以自己为上级部门的子部门有哪些,把子部门一个一个地遍历得到,这时候子部门的操作,就和它的上级部门的删除一样,需要删除自己并且查找它的子部门,这样一来就有个类似重复的操作,子部门的操作和上级部门的操作经历的步骤是一样的,因此在子部门的遍历中让它执行这个本身的函数。这样一来就形成了一个递归算法。

PHP 相关文章推荐
[FAQ]PHP中的一些常识:类篇
Oct 09 PHP
PHP URL地址获取函数代码(端口等) 推荐
May 15 PHP
php下使用iconv需要注意的问题
Nov 20 PHP
php统计文件大小,以GB、MB、KB、B输出
May 29 PHP
TMDPHP 模板引擎使用教程
Mar 13 PHP
PHP autoload与spl_autoload自动加载机制的深入理解
Jun 05 PHP
PHP5中实现多态的两种方法实例分享
Apr 21 PHP
ThinkPHP函数详解之M方法和R方法
Sep 10 PHP
PHP上传Excel文件导入数据到MySQL数据库示例
Oct 25 PHP
PHP设计模式之适配器模式原理与用法分析
Apr 25 PHP
PHP读取XML文件的方法实例总结【DOMDocument及simplexml方法】
Sep 10 PHP
PHP设计模式(一)工厂模式Factory实例详解【创建型】
May 02 PHP
PHP fopen()和 file_get_contents()应用与差异介绍
Mar 19 #PHP
php实现保存submit内容之后禁止刷新
Mar 19 #PHP
php过滤所有恶意字符(批量过滤post,get敏感数据)
Mar 18 #PHP
如何阻止网站被恶意反向代理访问(防网站镜像)
Mar 18 #PHP
PHP中获取时间的下一周下个月的方法
Mar 18 #PHP
php读取目录所有文件信息dir示例
Mar 18 #PHP
PHP将两个关联数组合并函数提高函数效率
Mar 18 #PHP
You might like
php中批量替换文件名的实现代码
2011/07/20 PHP
浅析linux下apache服务器的配置和管理
2013/08/10 PHP
基于php伪静态的实现方法解析
2020/07/31 PHP
用javascript实现的仿Flash广告图片轮换效果
2007/04/24 Javascript
javascript学习之闭包分析
2010/12/02 Javascript
Ajax搜索结果页面下方的分页按钮的生成
2012/04/05 Javascript
jQuery实现 注册时选择阅读条款 左右移动
2013/04/11 Javascript
自动刷新网页,自动刷新当前页面,JS调用
2013/06/24 Javascript
Javascript中3种实现继承的方法和代码实例
2014/08/12 Javascript
如何让你的Lightbox支持滚轮缩放及Base64图片
2014/12/04 Javascript
JavaScript电子时钟倒计时
2016/01/09 Javascript
JavaScript实现通过select标签跳转网页的方法
2016/09/29 Javascript
详解vue.js全局组件和局部组件
2017/04/10 Javascript
基于JavaScript实现类名的添加与移除
2017/04/23 Javascript
JS实现的JSON序列化操作简单示例
2018/07/02 Javascript
微信小程序textarea层级过高(盖住其他元素)问题的解决办法
2019/03/04 Javascript
微信小程序项目总结之记账小程序功能的实现(包括后端)
2019/08/20 Javascript
jQuery 判断元素是否存在然后按需加载内容的实现代码
2020/01/16 jQuery
你不知道的 TypeScript 高级类型(小结)
2020/08/28 Javascript
CentOS中升级Python版本的方法详解
2017/07/10 Python
详解使用 pyenv 管理多个版本 python 环境
2017/10/19 Python
pycharm运行scrapy过程图解
2019/11/22 Python
Django实现任意文件上传(最简单的方法)
2020/06/03 Python
CSS实现圆形放大镜狙击镜效果 只有圆圈里的放大
2012/12/10 HTML / CSS
加拿大最大的书店:Indigo
2017/01/01 全球购物
匈牙利最大的健身制造商和销售商:inSPORTline
2018/10/30 全球购物
十月份红领巾广播稿
2014/01/22 职场文书
工会主席岗位责任制
2014/02/11 职场文书
2015秋季开学典礼新闻稿
2015/07/17 职场文书
公司周年庆典致辞
2015/07/30 职场文书
Mysql binlog日志文件过大的解决
2021/10/05 MySQL
mysql中数据库覆盖导入的几种方式总结
2022/03/25 MySQL
TV动画《八十龟酱观察日记》第四季宣传PV公布
2022/04/06 日漫
Centos系统通过Docker安装并搭建MongoDB数据库
2022/04/12 MongoDB
利用Java连接Hadoop进行编程
2022/06/28 Java/Android
Linux安装Docker详细教程
2022/07/07 Servers