如何构建目录中存在的 .html 文件名的索引数组?

How to build an indexed array of .html filenames that exist in a directory?

我正在使用此 php 代码获取给定目录中的所有 html 文件:

$dirpath = ".....";
$filelist = preg_grep('~\.(html)$~', scandir($dirpath));

现在我想获取数组中的特定元素,例如:

echo $filelist[0];

这失败了。在我的目录中有 52 个文件,count($filelist) returns '52',但要获取第一个元素,我需要使用 echo $filelist[3]; 最后一项通过索引 54 获取地址。什么是这个?为什么我不能用索引 0-51 来寻址它们?

编辑:Possible duplicate 只解释了 2 个索引的移动,第三个是什么?但是: array_values 解决了问题。

那些是当前 (.) 和父 (..) 目录。它们存在于所有目录中,用于指代目录本身及其直接父目录。
Why is it whenever I use scandir() I receive periods at the beginning of the array?

使用array_values()函数将数字索引重置为从0开始。

尝试:

$dirpath = ".....";
$filelist = array_values(preg_grep('~\.(html)$~', scandir($dirpath)));

// print the first value
echo $filelist[0];

只需使用

$filelist = array_values($filelist);

您的函数正在从已编入索引的数组中挑选项目,因此键没有按顺序排列。

使用 scandir() 然后应用正则表达式过滤器,然后重新索引是一种低效的方法,而 glob() 可以在一次调用中提供您想要的内容。

以下将生成仅包含 .html 个文件的数组。

如果您想查看文件名前面的目录路径:

$filelist = glob($dirpath . "*.html");  // you may need to add a slash before the filename

如果您只想查看文件名:

chdir($dirpath);
$filelist = glob("*.html");