使用PHP列出所有子目录和文件
我正在尝试构造一个函数,该函数将从URL中回显所有子目录和文件的无序列表 我知道这里有很多这样的例子,但我正在努力寻找合适的例子 这就是我到目前为止所做的:使用PHP列出所有子目录和文件,php,arrays,list,Php,Arrays,List,我正在尝试构造一个函数,该函数将从URL中回显所有子目录和文件的无序列表 我知道这里有很多这样的例子,但我正在努力寻找合适的例子 这就是我到目前为止所做的: $dir = "an/example/directory"; echo "<ul id='folderList'>"; $dirArr = dirToArray($dir); listDir($dirArr); echo "</ul>"; 这是我遇到麻烦的部分。第二个函数应该在多数组中循环,并相应地回显其内容 f
$dir = "an/example/directory";
echo "<ul id='folderList'>";
$dirArr = dirToArray($dir);
listDir($dirArr);
echo "</ul>";
这是我遇到麻烦的部分。第二个函数应该在多数组中循环,并相应地回显其内容
function listDir($multiArr)
{
foreach ($multiArr as $key => $value) {
if (is_array($value)) {
echo '<li class="sub-directory"><span>'.basename($key).'</span>';
echo '<ul>';
listDir($multiArr[$key]);
echo '</ul>';
} else {
echo '<li class="file"><span>'.basename($value).'</span>';
}
echo '</li>';
}
}
函数listDir($multiArr)
{
foreach($multiArr作为$key=>$value){
if(是_数组($value)){
echo''.basename($key)。';
回声“”;
listDir($multiArr[$key]);
回声“
”;
}否则{
echo' '.basename($value)。'';
}
回音“ ”;
}
}
然而,第二个功能似乎并不像预期的那样工作。我真的不知道为什么,但它似乎在正确地递归循环方面有问题
无论如何,这两个函数运行后,输出应如下所示:
<ul id='folderList'>
<li class="sub-directory"><span>sub-directory-name</span>
<ul>
<li class="file><span>fileName1</span></li>
<li class="file><span>fileName2</span></li>
</ul>
</li>
<li class="file><span>fileName3</span></li>
</ul>
子目录名
- 文件名2
下面是获取主目录和子目录的简单函数
function listdir($dir){
$ffs = scandir($dir);
echo '<ol>';
foreach($ffs as $ff){
if($ff != '.' && $ff != '..'){
echo '<li>'.$ff;
if(is_dir($dir.'/'.$ff)) listdir($dir.'/'.$ff);
echo '</li>';
}
}
echo '</ol>';
}
listdir('Main Dir');
函数listdir($dir){
$ffs=斯堪的纳维亚($dir);
回声';
foreach($ffs作为$ff){
如果($ff!='.&&$ff!='.')){
回音“”。$ff;
if(is_dir($dir./'.$ff))listdir($dir./'.$ff);
回音“ ”;
}
}
回声';
}
listdir(“主目录”);
您可以使用bekow函数以表格格式列出
function dirToArray($dir)
{
$cdir = scandir($dir);
echo "<table>";
foreach ($cdir as $key => $value)
{
echo "<tr>";
if (!in_array($value, array(".")))
{
if (is_dir($dir . DIRECTORY_SEPARATOR . $value))
{
$path = $dir . DIRECTORY_SEPARATOR . $value;
echo "<td><a href='file_name.php?dir=$path' >" . $value . "</a></td>";
}
else
{
$path = $dir . DIRECTORY_SEPARATOR . $value;
echo "<td></td><td><a>". $value . "</a></td>";
}
}
echo "</tr>";
}
echo "</table>";
}
dirToArray($dir);
函数dirToArray($dir)
{
$cdir=scandir($dir);
回声“;
foreach($cdir作为$key=>$value)
{
回声“;
if(!in_数组($value,数组(“.”))
{
if(is_dir($dir.DIRECTORY_SEPARATOR.$value))
{
$path=$dir.DIRECTORY\u SEPARATOR.$value;
回声“;
}
其他的
{
$path=$dir.DIRECTORY\u SEPARATOR.$value;
回显“$value.”;
}
}
回声“;
}
回声“;
}
dirToArray($dir);
您的dirToArray()函数返回的数组是否正确?是的。如果它是一个文件,它将输出一个简单的值。或者一个数组,如果它是一个目录,请你更新数组好吗?@user3143218 Scandir已经返回,数组和Vijayaragavendran使用它创建了一个函数,只有你可以使用Vijayaragavendran的函数,我想你的问题会解决的。注意:这个函数调用自己。这是一个称为递归的原则,一旦掌握了基本知识,就可以很好地研究它。
function dirToArray($dir)
{
$cdir = scandir($dir);
echo "<table>";
foreach ($cdir as $key => $value)
{
echo "<tr>";
if (!in_array($value, array(".")))
{
if (is_dir($dir . DIRECTORY_SEPARATOR . $value))
{
$path = $dir . DIRECTORY_SEPARATOR . $value;
echo "<td><a href='file_name.php?dir=$path' >" . $value . "</a></td>";
}
else
{
$path = $dir . DIRECTORY_SEPARATOR . $value;
echo "<td></td><td><a>". $value . "</a></td>";
}
}
echo "</tr>";
}
echo "</table>";
}
dirToArray($dir);