递归函数是我们常用到的一类函数,最基本的特点是函数自身调用自身,但必须在调用自身前有条件判断,否则会无限调用下去。
一般来说,递归函数可利用全局变量,引用,静态变量,但需对他们的作用范围有所理解。递归函数也是解决无限级分类的一个很好的技巧。
一、利用引用做参数
PHP 的引用允许用两个变量来指向同一个内容,例如 $a = &$b; 这意味着 $a 和 $b 指向了同一个变量。
如下例子,因为 $data 使用了引用传递,所以数据会一直累加。
function recursion(&$data = [], $i = 0) { if ($i < 10) { $data[] = $i; $i++; $this->recursion($data, $i); } return $data; } // 调用 $this->recursion(); // [0,1,2,3,4,5,6,7,8,9]
二、利用全局变量
global 在函数内申明变量不过是外部变量的同名引用。变量的作用范围仍然在本函数范围内。改变这些变量的值,外部同名变量的值自然也改变了。
function recursion($data = [], $i = 0) { global $data; if ($i < 10) { $data[] = $i; $i++; $this->recursion($data, $i); } return $data; } // 调用 $this->recursion(); // [0,1,2,3,4,5,6,7,8,9]
三、利用静态变量
静态变量只在第一次调用时初始化。仅在局部函数域中存在,但当程序执行离开此作用域时,其值并不丢失。
function recursion($i = 0) { static $data = []; if ($i < 10) { $data[] = $i; $i++; $this->recursion($i); } return $data; } // 调用 $this->recursion(); // [0,1,2,3,4,5,6,7,8,9]
以上就是PHP实现递归的三种方法的详细内容,更多关于PHP 递归的资料请关注站长技术其它相关文章!
一、导读 本文主要介绍Redhat7.6系统安装oracle 12201版本RAC的一些坑以及避坑方...
最近在和团队规划OKR目标的时候,我们讨论了很多问题,我先抛砖引玉,列举了一些...
今天给大家分享四个在实际开发中,比较实用的SQL Server脚本函数,希望对大家能...
ajax传送json格式数据,关键是指定contentType,data要是json格式 如果是restful...
Afrikaans:af Albanian:sq Basque:eu Belarusian:be Bulgarian:bg Catalan:ca Ch...
一. RabbitMQ 简介 MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用...
Linux 发行版的爱好者们又有全新的 Linux 可以体验了,日前一款名为 TeLOS 的 Li...
如果你想对使用手机,平板电脑和辅助技术的用户隐藏某些内容,而只对键盘用户显...
本文分享自华为云社区《 架构可视化支撑系统演进探索 》原文作者无名小溪。 随着...
Eval 计算一个表达式的值并返回结果。 语法:[result = ]eval_r(expression_r) e...