我正在使用此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
解决了这个问题。
答案 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