php递归函数怎么用才有效


Posted in PHP onFebruary 24, 2018

有关php递归函数的用法,分享几个php递归函数的例子,在php编程中,使用递归进行函数调用很常见,递归函数用的好,可以提高代码效率,通过例子学习php递归函数的使用。

一、什么是递归函数?

一个函数在它的函数体内调用它自身称为递归调用。 这种函数称为递归函数。

php递归函数与非递归函数有什么区别?

例一:使用静态变量

代码示例:

function test(){
 static $dig=0;
 if($dig++<10){
  echo $dig;
  test();
 }
}
test();//12345678910

例二:使用递归函数和循环实现字符串逆转排列

代码示例:

function unreverse($str){
 for($i=1;$i<=strlen($str);$i++){
  echo substr($str,-$i,1);
 }
}
unreverse("abcdefg");//gfedcbc
function reverse($str){
 if(strlen($str)>0){
  reverse(substr($str,1));
  echo substr($str,0,1);
  return;
 }
}
reverse("abcdefg");//gfedcbc

二、php递归函数使用实例

php递归使用示例(php递归函数),包括递归获得角色ID字符串、递归获取级联角色信息数组、通过父角色的id获取子角色信息。

例子:

代码示例:

//递归获得角色ID字符串
function explodeRole($roleObj, &$resultStr){
 if(0 < count($roleObj->childRoleObjArr)){
 foreach($roleObj->childRoleObjArr as $childRoleObj){
  if('' == $resultStr){
  $resultStr .= "{$childRoleObj->id}";
  }else{
  $resultStr .= ", {$childRoleObj->id}";
  }
  explodeRole($childRoleObj, $resultStr);
 }
 }
}
//递归获取级联角色信息数组
function makeRoleRelation(&$roleObjArr){
 foreach($roleObjArr as $item){
 $item->childRoleObjArr = getRoleObjArrByParentId($item->id);
 if(0 < count($item->childRoleObjArr)){
  makeRoleRelation($item->childRoleObjArr);
 }
 }
}
//通过父角色的id获取子角色信息 
function getRoleObjArrByParentId($parentid){
 $operCOGPSTRTSysRole = new COGPSTRTSysRole();
 $operCOGPSTRTSysRole->setColumn($operCOGPSTRTSysRole->getAllColumn());
 $operCOGPSTRTSysRole->setWhere("parentroleid={$parentid}");
 $roleObjArr = $operCOGPSTRTSysRole->convResult2ObjArr($operCOGPSTRTSysRole->selectTable());
 return isset($roleObjArr)?$roleObjArr:array();
}

php递归函数用法

例1:使用静态变量实现递归。

代码示例:

function test(){
 static $dig=0;
 if($dig++<10){
 echo $dig;
 test();
 }
}
test();//12345678910

例2:使用递归函数和循环实现字符串逆转排列。

代码示例:

function unreverse($str){
for($i=1;$i<=strlen($str);$i++){
echo substr($str,-$i,1);
}
}
unreverse("abcdefg");
//gfedcbc
function reverse($str){
if(strlen($str)>0){
reverse(substr($str,1));
echo substr($str,0,1); return;
}
}
reverse("abcdefg");//gfedcbc

php递归函数有时可以循环替代,建议当不能用循环替代时再用,因为用循环我们更容易理解,更不容易出错。 php递归函数 php支付递归函数,递归函数就是调用自己本身,这些函数特别适用于浏览动态数据结构,例如树和列表。 几乎没有web应用程序要求使用复杂的数据结构。

例子:

代码示例:

reverse_r(substr($str,1)); echo substr($str,0,1); return; } ?>

这个程序清单中实现两个函数,这两个函数都可以相反的顺序打印字符串的内容 函数reversr_r是通过递归实现的,而函数reverse_i()是通过循环实现的。

总结

以上所述是小编给大家介绍的php递归函数怎么用才有效,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

PHP 相关文章推荐
通过ICQ网关发送手机短信的PHP源程序
Oct 09 PHP
用PHP实现多级树型菜单
Oct 09 PHP
PHP与javascript的两种交互方式
Oct 09 PHP
php结合飞信 免费天气预报短信
May 07 PHP
PHP COOKIE设置为浏览器进程
Jun 21 PHP
phpstorm编辑器乱码问题解决
Dec 01 PHP
php截取字符串函数分享
Feb 02 PHP
THINKPHP支持YAML配置文件的设置方法
Mar 17 PHP
解读PHP中上传文件的处理问题
May 29 PHP
Fleaphp常见函数功能与用法示例
Nov 15 PHP
如何打开php的gd2库
Feb 09 PHP
PHP校验15位和18位身份证号的类封装
Nov 07 PHP
php格式文件打开的四种方法
Feb 24 #PHP
Docker搭建自己的PHP开发环境
Feb 24 #PHP
php爬取天猫和淘宝商品数据
Feb 23 #PHP
Laravel如何使用Redis共享Session
Feb 23 #PHP
Laravel 实现密码重置功能
Feb 23 #PHP
支持汉转拼和拼音分词的PHP中文工具类ChineseUtil
Feb 23 #PHP
对于Laravel 5.5核心架构的深入理解
Feb 22 #PHP
You might like
PHP图片自动裁切应付不同尺寸的显示
2014/10/16 PHP
ThinkPHP自定义Redis处理SESSION的实现方法
2016/05/16 PHP
javascript下查找父节点的简单方法
2007/08/13 Javascript
extjs 学习笔记 四 带分页的grid
2009/10/20 Javascript
jquery+json 通用三级联动下拉列表
2010/04/19 Javascript
再次分享18个非常棒的jQuery表格插件
2011/04/10 Javascript
js去除重复字符串两种实现方法
2013/01/09 Javascript
jQuery获取样式中颜色值的方法
2015/01/29 Javascript
基于Node.js实现nodemailer邮件发送
2016/01/26 Javascript
Javascript中Promise的四种常用方法总结
2017/07/14 Javascript
vue滚动轴插件better-scroll使用详解
2017/10/17 Javascript
VUEJS 2.0 子组件访问/调用父组件的实例
2018/02/10 Javascript
详解js加减乘除精确计算
2019/03/19 Javascript
vue配置文件实现代理v2版本的方法
2019/06/21 Javascript
解决vue打包后vendor.js文件过大问题
2019/07/03 Javascript
24个解决实际问题的ES6代码片段(小结)
2020/02/02 Javascript
如何使用Jquery动态生成二级选项列表
2020/02/06 jQuery
vue插件--仿微信小程序showModel实现模态提示窗功能
2020/08/19 Javascript
基于NodeJS开发钉钉回调接口实现AES-CBC加解密
2020/08/20 NodeJs
创建与框架无关的JavaScript插件
2020/12/01 Javascript
python中的装饰器详解
2015/04/13 Python
python简单分割文件的方法
2015/07/30 Python
Python多层嵌套list的递归处理方法(推荐)
2016/06/08 Python
python3.8下载及安装步骤详解
2020/01/15 Python
浅谈SciPy中的optimize.minimize实现受限优化问题
2020/02/29 Python
Python 定义只读属性的实现方式
2020/03/05 Python
windows10环境下用anaconda和VScode配置的图文教程
2020/03/30 Python
python中matplotlib实现随鼠标滑动自动标注代码
2020/04/23 Python
python中的对数log函数表示及用法
2020/12/09 Python
CSS3弹性伸缩布局之box布局
2016/07/12 HTML / CSS
耐克波兰官方网站:Nike波兰
2019/09/03 全球购物
Envie de Fraise意大利:法国网上推出的孕妇装品牌
2020/10/18 全球购物
涉外文秘个人求职的自我评价
2013/10/07 职场文书
五一劳动节活动记录
2014/03/23 职场文书
护理见习报告范文
2014/11/03 职场文书
Mysql服务添加 iptables防火墙策略的方案
2021/04/29 MySQL