如何构建目录中存在的 .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");
我正在使用此 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");