我有一个包含可更改数量文件的目录,每个文件在第一行包含一个字符,其余文件内容包含CSV,例如:
U
Status4,jwalker,Tech Manual 03264
Status3,jwalker,Status Report 3213
Status4,rmartino,Tech Manual 52002
...
使用此代码,我可以轻松获取目录中所有报告文件名的列表:
<?php
// Open session
session_start();
// Get array of reports from directory
$files = scandir('reports');
$files <= array_pop($files);
$files <= array_shift($files);
$files <= array_shift($files);
// Extract summaries
for ($i=0; $i <= count($files)-1; $i++) {
$summaries[$i] = file($files[$i]);
}
?>
我想在第13行使用file()函数的原因是因为它可以方便地将文件分解为数组,因此我可以轻松地引用特定的行,例如$ summary [3] [2]来获取目录中第四个文件的第三行(记住我在这里从PHP默认值0开始计算)。 PHP.net文档没有说明任何关于NOT使用数组作为要传递给file()的字符串,所以我认为有一种方法可以做到这一点。但我只发现了常量和字符串,而不是传递数组。
这里有人有任何见解吗?非常感谢!
答案 0 :(得分:0)
将数组元素$arr[$k]
的值传递给file()
没有问题,只要它是表示文件路径的字符串即可。
问题是您正在扫描reports
文件夹,并获取文件名列表而不是文件路径。您需要在文件名前添加reports
。如果file()
找不到该文件,则不这样做会导致异常。
<?php
// Open session
session_start();
// Get array of reports from directory
$files = scandir('reports');
// Extract summaries
for ($i=0; $i <= count($files)-1; $i++) {
if ($files[$i] == '.' || $files[$i] == '..') continue;
$summaries[$i] = file('reports' . DIRECTORY_SEPARATOR . $files[$i]);
}
?>
另外,不确定以下内容是做什么的,但它实际上做的是删除最后一个文件,我在答案中省略了它
$files <= array_pop($files);
以下两行可能会删除.
和..
路径,我已经用循环中的检查替换了那些路径。
$files <= array_shift($files);
$files <= array_shift($files);