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


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 相关文章推荐
PHP自动更新新闻DIY
Oct 09 PHP
PHP中simplexml_load_string函数使用说明
Jan 01 PHP
解析Linux下Varnish缓存的配置优化
Jun 20 PHP
5种PHP创建数组的实例代码分享
Jan 17 PHP
PHP中的reflection反射机制测试例子
Aug 05 PHP
smarty内置函数{loteral}、{ldelim}和{rdelim}用法实例
Jan 22 PHP
PHP利用APC模块实现大文件上传进度条的方法
Oct 29 PHP
PHP编程开发怎么提高编程效率 提高PHP编程技术
Nov 09 PHP
php中array_unshift()修改数组key注意事项分析
May 16 PHP
PHP中的使用curl发送请求(GET请求和POST请求)
Feb 08 PHP
PHP生成短网址的思路以及实现方法的详解
Mar 25 PHP
thinkPHP3.2使用RBAC实现权限管理的实现
Aug 27 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
使用 php4 加速 web 传输
2006/10/09 PHP
Apache连接PHP后无法启动问题解决思路
2015/06/18 PHP
PHP生成各种常见验证码和Ajax验证过程
2016/01/10 PHP
PDO::quote讲解
2019/01/29 PHP
jQuery使用手册之三 CSS操作
2007/03/24 Javascript
再谈javascript图片预加载技术(详细演示)
2011/03/12 Javascript
禁止iframe脚本弹出的窗口覆盖了父窗口的方法
2014/09/06 Javascript
jQuery height()、innerHeight()、outerHeight()函数的区别详解
2016/05/23 Javascript
原生node.js案例--前后台交互
2017/02/20 Javascript
js实现鼠标拖动功能
2017/03/20 Javascript
vue 实现 tomato timer(蕃茄钟)实例讲解
2017/07/24 Javascript
jQuery中.attr()和.data()的区别分析
2017/09/03 jQuery
Bootstrap modal只加载一次数据的解决办法(推荐)
2017/11/24 Javascript
iview通过Dropdown(下拉菜单)实现的右键菜单
2018/10/26 Javascript
js中call()和apply()改变指针问题的讲解
2019/01/17 Javascript
JS求1到任意数之间的所有质数的方法详解
2019/05/20 Javascript
JS实现求字符串中出现最多次数的字符和次数示例
2019/07/05 Javascript
JavaScript实现字符串与HTML格式相互转换
2020/03/17 Javascript
vue3.0中友好使用antdv示例详解
2021/01/05 Vue.js
[12:36]《DOTA2》国服注册与激活指南全攻略
2013/04/28 DOTA
[06:07]DOTA2-DPC中国联赛 正赛 Ehome vs VG 选手采访
2021/03/11 DOTA
python操作日期和时间的方法
2014/03/11 Python
python利用拉链法实现字典方法示例
2017/03/25 Python
在windows下使用python进行串口通讯的方法
2019/07/02 Python
keras 实现轻量级网络ShuffleNet教程
2020/06/19 Python
python 装饰器的实际作用有哪些
2020/09/07 Python
夏威夷航空官网:Hawaiian Airlines
2016/09/11 全球购物
Smashbox官网:美国知名彩妆品牌
2017/01/05 全球购物
英国高级百货公司:Harvey Nichols
2017/01/29 全球购物
程序员跳槽必看面试题总结
2013/06/28 面试题
项目经理岗位职责
2013/11/11 职场文书
环境卫生标语
2014/06/09 职场文书
公司介绍信范文
2015/01/31 职场文书
听证通知书
2015/04/24 职场文书
关于JavaScript回调函数的深入理解
2021/06/27 Javascript
Flutter集成高德地图并添加自定义Maker的实践
2022/04/07 Java/Android