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

时间:2018-10-13 07:47:54

标签: php arrays directory filenames preg-grep

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

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

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

echo $filelist[0];

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

编辑:可能的重复项仅说明2个索引的移位,第三个是什么?但是:array_values解决了这个问题。

4 个答案:

答案 0 :(得分:4)

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

尝试:

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

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

答案 1 :(得分:1)

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

答案 2 :(得分:1)

只需使用

$filelist = array_values($filelist);

您的功能是从已经索引的数组中挑选项目,因此键不是按顺序排列的。

答案 3 :(得分:0)

2018-09-03 2018-09-05 2018-09-06 2018-09-08 2018-09-10 2018-09-11 2018-09-22 2018-09-25 2018-09-26 2018-09-29 2018-09-30 2018-10-02 可以在一个呼叫中提供您想要的内容时,使用scandir()然后应用正则表达式过滤器,然后重新编制索引是一种低效的方法。

以下内容将仅生成.html文件的数组。

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

glob()

如果只想查看文件名:

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