将数组传递给file()?

时间:2012-11-27 17:25:21

标签: php arrays file

我有一个包含可更改数量文件的目录,每个文件在第一行包含一个字符,其余文件内容包含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()的字符串,所以我认为有一种方法可以做到这一点。但我只发现了常量和字符串,而不是传递数组。

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

1 个答案:

答案 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);