本文目录一览:
- 1、PHP遍历输出文件夹内的所有文件用递归算法?
- 2、PHP递归无限分类的 如何统计总条数 以及对显示的结果进行分页?比如设置为每页显示10个 。
- 3、php如何实现递归遍历文件目录
- 4、php 递归问题,想要将数据按照无限极分类的样式显示出来
- 5、PHP关于通过递归函数显示所有分类的问题
PHP遍历输出文件夹内的所有文件用递归算法?
一般来说,类似这种遍历输出所有文件,大多采用递归算法,这样程序显得比较简洁,其实际执行效率来说,并不见得比其他方法更好。
以下是示例:
function file_list($path)
{
if ($handle = opendir($path))//打开路径成功
{
while (false !== ($file = readdir($handle)))//循环读取目录中的文件名并赋值给$file
{
if ($file != "." $file != "..")//排除当前路径和前一路径
{
if (is_dir($path."/".$file))
{
// echo $path.": ".$file."br";//去掉此行显示的是所有的非目录文件
file_list($path."/".$file);
}
else
{
echo $path.": ".$file."br";
}
}
}
}
}
PHP递归无限分类的 如何统计总条数 以及对显示的结果进行分页?比如设置为每页显示10个 。
每个节点都要记录子节点的数量c。每新增一个节点都要对各父和祖节点的子节点计数加1。这样根节点会有总数的记录。
这样递归遍历时也可以根据子节点数量c的来确定读取的数量限制。比如 读取条数计数10 就继续递归
在每个节点的表上 增加子节点的id集或计数,增加根节点到父节点路径,会方便这些操作。
php如何实现递归遍历文件目录
只需要一个递归函数:
function Folders($folder) {
if (!is_dir($folder)) return false;
foreach (scandir($folder) AS $f) {
if ($f == '.' or $f == '..') continue;
echo $f, 'hr/';
Folders($folder . '/' . $f); // 递归调用
}
}
Folders('Test');
php 递归问题,想要将数据按照无限极分类的样式显示出来
首先 将json 解码成数组, 用json_decode 函数 注意 一定要加上第二个参数 否则他会返回一个对象。接下来就是地递归了。这是一个最简单的递归只要逐个遍历即可。
下面是完整的代码:
$data= json_decode($str,true);
$options = getChildren($data);
function getChildren($parent,$deep=0) {
foreach($parent as $row) {
$data[] = array("id"=$row['id'], "name"=$row['name'],"pid"=$row['parentid'],'deep'=$deep);
if ($row['childs']) {
$data = array_merge($data, getChildren($row['childs'], $deep+1));
}
}
return $data;
}
?
select name="" id=""
?php foreach ($options as $row) { ?
option value="?php echo $row['id'] ?"?php echo str_pad("",$row['deep']*3, "-",STR_PAD_RIGHT); ??php echo $row['name']; ?/option
?php } ?
/select
以上代码已测试通过 效果图如下
PHP关于通过递归函数显示所有分类的问题
首先需要搞明白你的数据库结构,你的档案类别数据库表 dangan_class 是不是三字段:id、name、f_id,其中id为主键,f_id为自关联的外键,表示上一分类,0表示最上级分类,对不对?
树状枚举出所有类别的代码可以这样:
?php
function zilei($fid,$level){
$sql="select id,name from dangan_class where f_id=$fid";
$query=mysql_query($sql);
while(list($id,$name)=mysql_fetch_array($query)){
echo str_repeat("==",$level),$name,"a href='?del=$id'删除/abr\n";
zilei($id,$level+1);
}
mysql_free_result($query);
}
zilei(0,0);
?
为了结构简单,我上面只做了删除的代码,修改的部分你自行加上,你也可以先调试好了删除的代码再加。
代码里面的==是为了缩进,你可以换为全角的空白,或者其它符号。