gpt4 book ai didi

php - 如何使用 scandir 列出文件夹和子文件夹中的所有文件并将它们显示为 select 中的选项?

转载 作者:行者123 更新时间:2023-12-02 21:25:02 24 4
gpt4 key购买 nike

我有一段代码想要修改以列出当前路径中的文件夹和子文件夹中的所有文件。我找到了几种可能的解决方案。我尝试实际实现它们,但似乎没有任何效果,所以我不确定它们是否真正起作用,或者只是我错误地实现了它们。无论哪种方式,这都是我当前的代码:

<?php 
$currentdir = 'C:/xampp/htdocs/test/'; //change to your directory
$dir = opendir($currentdir);
echo '<select name="workout">';
$file = preg_grep('/^([^.])/', scandir($dir));
while($file = readdir($dir))
{
if ($file != "." && $file != "..") {
echo "<option value='$file'>$file</option>";
}
else {
continue;
}
}
echo '</select>';
closedir($dir);
?>

目前此代码显示结果:

$currentdir
Option1
Option2
Option3
SUB-FOLDER1
SUB-FOLDER2

有人可以帮助我并向我展示如何使用现有代码编写/重写代码来显示文件夹和其他子文件夹中的文件,如下所示:

$currentdir
Option1
Option2
Option3
SUB-FOLDER1
Option1
Option2
Option3
SUB-FOLDER2
Option1
Option2
Option3

我真的非常渴望找到解决方案,提前谢谢大家。

最佳答案

虽然其他答案都很好且正确,但请允许我添加我的解决方案:

function dirToOptions($path = __DIR__, $level = 0) {
$items = scandir($path);
foreach($items as $item) {
// ignore items strating with a dot (= hidden or nav)
if (strpos($item, '.') === 0) {
continue;
}

$fullPath = $path . DIRECTORY_SEPARATOR . $item;
// add some whitespace to better mimic the file structure
$item = str_repeat('&nbsp;', $level * 3) . $item;
// file
if (is_file($fullPath)) {
echo "<option>$item</option>";
}
// dir
else if (is_dir($fullPath)) {
// immediatly close the optgroup to prevent (invalid) nested optgroups
echo "<optgroup label='$item'></optgroup>";
// recursive call to self to add the subitems
dirToOptions($fullPath, $level + 1);
}
}

}

echo '<select>';
dirToOptions();
echo '</select>';

它使用recursive调用以获取子项目。请注意,我在每个项目之前添加了一些空格,以更好地模仿文件结构。此外,我还立即关闭了 optgroup,以防止最终出现嵌套的 optgroup 元素,这是无效的 HTML。

关于php - 如何使用 scandir 列出文件夹和子文件夹中的所有文件并将它们显示为 select 中的选项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25067241/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com