
一般来说,类似这种遍历输出所有文件,大多采用递归算法,这样程序显得比较简洁,其实际执行效率来说,并不见得比其他方法更好。
以下是示例:
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
i$0}'
i=`pwd`'/'
(注意:这里
ls
后面那是个数字
1
而不是字母
l)
2、列出当前目录及子目录的文件、文件夹完整路径
ls
-r
|awk
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函数递归等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)