php类递归
1. php递归获取目录内文件封装类分享
php递归获取目录内文件封装类分享,可以递归子目录
代码如下:
代码如下:
function
readFileFromDir($dir)
{
if
(!is_dir($dir))
{
return
false;
}
//打开目录
$handle
=
opendir($dir);
while
(($file
=
readdir($handle))
!==
false)
{
//排除掉当前目录和上一个目录
if
($file
==
"."
||
$file
==
"..")
{
continue;
}
$file
=
$dir
.
DIRECTORY_SEPARATOR
.
$file;
//如果是文件就打印出来,否则递归调用
if
(is_file($file))
{
print
$file
.
'<br
/>';
}
elseif
(is_dir($file))
{
readFileFromDir($file);
}
}
}
调用方式:
代码如下:
$dir
=
'/home/www/test';
readFileFromDir($dir);
查看php手册的话,还有一个方法scandir也可以使用,不过这个方法会一次性获取单级目录下的所有文件,存放到数组里,如果目录里的文件比较多的话,会卡。
2. PHP怎么递归
下面我举一个其他的例子,虽然不是族谱,但是原理都是一样的。
在一些复杂的系统中,要求对信息栏目进行无限级的分类,以增强系统的灵活性。那么PHP是如何实现无限级分类的呢?我们在本文中使用递归算法并结合mysql数据表实现无限级分类。
递归,简单的说就是一段程序代码的重复调用,当把代码写到一个自定义函数中,将参数等变量保存,函数中重复调用函数,直到达到某个条件才跳出,返回相应的数据。
Mysql
首先我们准备一张数据表class,记录商品分类信息。表中有三个字段,id:分类编号,主键自增长;title:分类名称;pid:所属上级分类id。
class表结构:
CREATE TABLE IF NOT EXISTS `class` (
`id` mediumint(6) NOT NULL AUTO_INCREMENT,
`title` varchar(30) NOT NULL,
`pid` mediumint(6) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
插入数据后,如图:
如果要输出json格式的数据,则可使用:
echo json_encode($list);
3. php递归无限极分类怎么弄
给个函数你,调用get_category()就是一个数组格式的结果
function get_category($parent_id=0){
$arr=array();
$sql = "select * from category where parent_id=$parent_id";//查询子级数据
$result = array(a_object,b_object,,,)=sql_query($sql);//查询结果一个数组或列表格式,自己完善。
if($result){
foreach($result as $re){//循环数组
if(get_category($re.id))//如果子级不为空
$re['child'] = get_category($re.id);
$arr[] = $re;
}
return $arr;
}
4. php递归的方法求和1+2+3+...+n
<?php
function add($n)
{
$result = 0;
for($i=1;$i<$n+1;$i++)
{
$result += $i;
}
return $result; 返回计算结果
}
echo add(5); //调用上面的函数
?>
5. 如何理解php中的递归函数 (详细讲解)
递归其实就是“一个函数的自调用”
在这个“自调用”的过程中,必须要有一个变化的“参数”,当这个“参数”达到你的期望值的时候,终止该“自调用”过程
拿楼主的程序来说
demo($n)内部又有调用demo($n-1),构成了“自调用”
且,$n又有一个“期望值”,即是$n>1,不满足此条件时,该自调用终止
即是说,最后一个执行的demo是demo($n9-1),其中$n9=2,然后返回为1(因为执行了return 1)
则$n9*demo($n9-1)即等于 2*demo(2-1),又等于2*1=2;
则$n8*demo($n8-1)即等于 3*demo(3-1),又等于3*2=6;
则$n7*demo($n7-1)即等于 4*demo(4-1),又等于4*6=24;
……
依次类推
这样想:
demo(1)是等于1,这个没有疑问吧?
然后demo(2)等于2*demo(1)=2*1=2
然后demo(3)等于3*demo(2)=3*2=6
……
一直到demo(10)
6. php中用递归函数计算出16的4次方
functionfunc($x,$n)
{
if搏枯握($n<=0)
败碰return1;
基庆return$x*func($x,$n-1);
}
echofunc(16,4);
7. php写函数 根据子类(id)递归查找顶级父类(id) 返回父类名字 (表结构:id name pid)
你这种表结构叫邻接缓租表,查询或皮的方式通过自连接。如
SELECTt1.nameASlev1,t2.nameaslev2,t3.nameaslev3,t4.nameaslev4
FROMTbnameASt1
LEFTJOINTbnameASt2ONt2.pid=t1.id
LEFTJOINTbnameASt3ONt3.pid=t2.id
LEFTJOINTbnameASt4ONt4.pid=t3.id
WHEREt1.name='XXXX'
这种方法的主要局限是你需要为每层数据添加一个自连接,随着层次的增加,自连接
变得越来越复杂,检索的性能自然而然的也就下降了。当然这种结构在查询前必须知道该节点所处的层级,否则无法确定自连接的深度。
邻接表模型衫哪差的局限性很大,用纯SQL实现有一定的难度。不妨考虑其他模型,比如嵌套模型。
嵌套模型的基本结构是树型结构,SQL检索比邻接表要方便很多。
关于嵌套模型,PHPChina的第一期电子杂志PHPer也有过深入探讨,请参考!