-2

我有一个包含可变数量文件的目录,每个文件在第一行包含一个字符,其余文件内容为 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() 函数的原因是因为它可以方便地将文件分成一个数组,这样我就可以轻松引用特定的行,例如 $summaries[3][2] 来获取第三行从目录中的第四个文件(请记住,我在这里从 PHP 默认值 0 开始计算)。PHP.net 文档没有说明不使用数组作为要传递给 file() 的字符串,所以我认为有办法做到这一点。但是我只找到了常量和字符串,而不是正在传递的数组。

有人对这里有任何见解吗?非常感谢!

4

1 回答 1

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);
于 2012-11-27T17:48:32.253 回答