-2

次のように、変更可能な数のファイルを含むディレクトリがあり、各ファイルの最初の行には 1 文字が含まれ、残りのファイル コンテンツには 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] などの特定の行を簡単に参照して 3 行目を取得できるようにするためです。ディレクトリの 4 番目のファイルから (ここでは 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);

.次の 2 行はパスとパスを削除していると思わ..れますが、ループ内のチェックに置き換えました。

$files <= array_shift($files);
$files <= array_shift($files);
于 2012-11-27T17:48:32.253 に答える