PHP fopen 或file_get_contents使用 fgetcsv 读取 CSV 文件

PHP fopen or file_get_contents reading CSV files with fgetcsv

提问人:mrdigitalis 提问时间:6/22/2022 最后编辑:Philmrdigitalis 更新时间:6/22/2022 访问量:814

问:

我有一个问题。在我的原始代码中,我打开了一个文件:

$file = fopen ("files/bla1.exp" , "r" );

打开文件后,我想逐行读取CSV:

$aCsvLine = fgetcsv($file,"0",";",'"');

这很好用,但现在问题来了。现在我想打开多个文件,然后使用 fgetcsv 逐行读取。

这是nog工作:

if($sDate ==  "2022-07-18" || $sDate ==  "2022-07-19" || $sDate ==  "2022-07-20" || $sDate ==  "2022-07-21" || $sDate ==  "2022-07-22")
      {
        $file = fopen ("files/bla1.exp" , "r" );
        $file = fopen ("files/bla2.exp" , "r" );
        $file = fopen ("files/bla3.exp" , "r" );
      }

而我的另一篇文章中的这个也不起作用,因为缺少句柄:

    $file = '';
if ($sDate ==  "2022-07-18" || $sDate ==  "2022-07-19" || $sDate ==  "2022-07-20" || $sDate ==  "2022-07-21" || $sDate ==  "2022-07-22")
      {
        $file .= file_get_contents("files/bla1.exp");
        $file .= file_get_contents("files/bla2.exp");
        $file .= file_get_contents("files/bla3.exp");
      }

如何首先打开我的 csv 文件并将它们附加到一个文件中并逐行读取。我希望我把我的问题说清楚了。

php fopen 文件-get-contents fgetcsv

评论

0赞 Phil 6/22/2022
使用不同的变量(、等)或数组 () 来存储文件句柄$file1$file2$files = [ fopen(), fopen(), ...]
0赞 mrdigitalis 6/22/2022
我需要把它作为一个大文件一起打开,然后逐行阅读。通常我手动将文件复制到一个文件中。但这需要很长时间。我现在正在寻找一种动态的方式。
0赞 Tangentially Perpendicular 6/22/2022
看看这个问题以及你之前的帖子,还不清楚你想做什么。您似乎有许多CSV文件,您正在尝试从中读取和提取CSV数据。当你拥有CSV数据时,你还没有说过你正在用它做什么。这个问题是解决你上一个问题的答案引起的问题,但实际上,你并不是在问整个问题,所以答案不一定适用于你遇到的问题。
1赞 Tangentially Perpendicular 6/22/2022
“我需要把它们作为一个大文件一起打开”——为什么?为什么按顺序打开文件不起作用?提取数据后,您将如何处理数据?
1赞 Tangentially Perpendicular 6/22/2022
在我看来,使用一堆CSV文件执行此操作不是正确的方法。您是否考虑过为此使用数据库?

答:

1赞 Phil 6/22/2022 #1

创建一个文件名数组并迭代它。在每次迭代中,打开文件并使用 开始读取。fgetcsv()

$files = ['files/bla1.exp', 'files/bla2.exp', 'files/bla3.exp'];
$allRows = [];

foreach ($files as $file) {
    $fh = fopen($file, 'rb');
    while (($row = fgetcsv($fh, 0, ';', '"')) !== false) {
        $allRows[] = $row; // ¯\_(ツ)_/¯
    }
    fclose($fh);
}