PHP遍历输出文件夹内的所有文件用递归算法

PHP遍历输出文件夹内的所有文件用递归算法,第1张

一般来说,类似这种遍历输出所有文件,大多采用递归算法,这样程序显得比较简洁,其实际执行效率来说,并不见得比其他方法更好。

以下是示例:

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>";

}

}

}

}

}

1、列出当前目录的文件、文件夹完整路径

ls

-1

|awk

'{print

i$0}'

i=`pwd`'/'

(注意:这里

ls

后面那是个数字

1

而不是字母

l)

2、列出当前目录及子目录的文件、文件夹完整路径

ls

-r

|awk

'{print

i$0}'

i=`pwd`'/'

2b)

列出当前目录及子目录下的文件夹完整路径

ls

-fr

|

grep

/$

|

sed

"s:^:`pwd`/:"

3、用find实现,好像运行要慢些

find

/

-name

""

-exec

ls

{}

\;

4、递归列出当前目录及子目录名称

ls

-fr

|

grep

/$

5、递归列出当前目录及子目录名称,包括相关属性

ls

-lr

|

grep

"^d"

#

drwxr-xr-x

3

idea

idea

4096

aug

2

2009

images

6、只列出当前目录下的子目录

用ls只列出子目录

ls

-d

/

可以这样理解吧

function f($a)

{

if(0<3)

{

echo "before:"$a"</br>";

// f(1);

if(1<3)

{

echo "before:"$a"</br>";

// f(2);

if(2<3)

{

echo "before:2</br>";

//if(3<3),不成立,不执行语句

echo "after:2</br>";

}

echo "after:"$a"</br>";

} echo "after:"$a"</br>";

}

}

这个逻辑性有点强

你没有去除目录下的""和“”的情况,还有就是你is_dir里那个参数判断有问题,你参数路径不完整,然后就是你的$file没有全局。

""是上一级目录,""是当前目录,循环到这两个的时候就陷入死循环了,你有再大的空间也不够。

修改后的方法是:

function GetAllFileByDir($fileDir)

{

 global $num,$files;

 $MyArry=scandir($fileDir);

 for($j=0;$j<count($MyArry);$j++)

 {

  if($MyArry[$j]!=""&&$MyArry[$j]!=""&&is_dir($fileDir"/"$MyArry[$j]))

  {

   GetAllFileByDir($fileDir"/"$MyArry[$j]);

  }

  elseif($MyArry[$j]!=""&&$MyArry[$j]!="")

  {

   $files[$num]=$MyArry[$j];

   $num++;

  }

 }

}

GetAllFileByDir("d:/test");

if(count($files)>0)

{

 for($s=0;$s<count($files);$s++)

 {

  echo $files[$s]"<br/>";

 }

}

function getAllIds($id)

{  

   $res = mysql_query("select  from `表名` where father_id='$id'"); 

   while($row = mysql_fetch_array($res,MYSQL_ASSOC))

   {

       print_r($row);

       getAllIds($row['class_id']);  

   }

}

假设你系统里数据库请求的函数是 pdo_query (你自己根据情况调整),表名是tblcate

另外,这段代码使用到了array_column函数,该函数从php55起才有,如果你的版本较低,要找一个兼容函数放到函数库里(官方文档评论中就有实现)

以下是代码文本 如果复制过去出现T_VARIABLE错误,就是代码中字符被系统混掉了,你要重新手打一下

//这里根据你的意思,应该是选出没有下级的节点,如果需要全部或其它的,你根据情况修改,不影响后面的其它 *** 作

$selectedNodes = pdo_query("select from tblcate where pid not in(select pid from tblcate)");

//选出全部节点

$allNodes = pdo_query("select from tblcate ");

//将节点数据使用id索引,方便获取

$allNodes = array_column($allNodes, NULL, 'id');

foreach($selectedNodes as &$node){

$tree = getParentNode($node['pid']);

//这里的$tree 是上级名称拼起来的,不包含本级名称,如要包含,在后面附加上就行了

$node['tree'] = implode(',',$tree);

}

unset($node);

var_export($selectedNodes );

function getParentNode($pid){

global $allNodes;

$pnodes=[];

if($pid> 0 && isset($allNodes[$pid])){

$pNode = $allNodes[$pid];

$pnodes[]= $pNode['name'];

$rnodes = getParentNode($pNode['pid']);

if(!empty($rnodes)){

$pnodes = array_merge($pnodes,$rnodes);

}

}

return $pnodes;

}

以上就是关于PHP遍历输出文件夹内的所有文件用递归算法全部的内容,包括:PHP遍历输出文件夹内的所有文件用递归算法、PHP 列出当前目录下所有文件(自身别列出来)、php函数递归等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/10154684.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-05
下一篇2023-05-05

发表评论

登录后才能评论

评论列表(0条)

    保存