1

可能重复:
如何使用 PHP 和 fgetcsv 函数从 CSV 文件创建数组

我有一个包含多行逗号分隔值的文件。该文件的示例是:

1359739665,511251515,115151515,启动,1277771750,2215812581258,31.55.115.12,0,0 1359739665,511251515,115151515,恢复,1277771750,2215812581258,31.55.115.12,0,0 1359739665,511251515,115151515,恢复,1277771750, ,2215812581258,31.55.115.12,0,0 1359739665,511251515,115151515,结束,1277771750,,2215812581258,31.55.115.12,0,0

我基本上需要遍历每一行。目前,这是我的代码:

$file = "log.txt";
$contents = file_get_contents($file);
$fields = explode(',', $contents);

foreach ($fields as $row)
    {
       echo $row;
    }

这适用于输出整个文件。但我的问题是如何一次迭代一行。每行基本上没有逗号结束,但我不知道如何在那里强制休息。我想做的是这个(即使代码不正确):

foreach ($fields as $row)  //need $row to equal each row of the log
  {
      echo $row[0];  // will output 1359739665
      echo $row[1];  // will output 511251515
      etc...
  }

谢谢!

4

5 回答 5

4

您应该使用str_getcsv()fgetcsv()来读取 CSV 数据。

使用示例fgetcsv()

if (($handle = fopen("log.txt", "r")) !== FALSE) {
    while (($row = fgetcsv($handle, 1000, ",")) !== FALSE) {
        echo $row[0] . "\n"; // Will output  data contained in the first column
    }
    fclose($handle);
}

使用示例str_getcsv()

$file = "log.txt";
$contents = file($file, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);

$csvRows = array_map('str_getcsv', $contents);

foreach($csvRows as $row) {
    echo $row[0] . "\n"; // Will output  data contained in the first column
}

explode()当 CSV 字段的值中可能包含逗号或 CSV 文件的文件结尾不一致时,使用手动解析 CSV 数据可能会导致问题。最好使用上述专门功能,因为它们是针对此特定任务量身定制的。

于 2013-02-05T02:52:19.643 回答
1

而不是file_get_contents只使用file

$array_of_contents = file($file, FILE_IGNORE_NEW_LINES);

完成后,您可以遍历数组并使用以下命令获取文件的每个“列” str_getcsv

foreach (file($file, FILE_IGNORE_NEW_LINES) as $line) {
    foreach (str_getcsv($file) as $fields) {
        echo $fields[0];
    }
}
于 2013-02-05T02:51:59.450 回答
0

计算 .txt 文件的行数,使用 foreach() 一次获取一行,展开该行

于 2013-02-05T02:51:42.737 回答
0

按新线展开

$fields = explode("\n", $contents);
于 2013-02-05T02:52:06.043 回答
0

试试这个 :

foreach(file('my.csv') as $line) {
    $record = str_getcsv($line, ',');
    var_dump($record);
}

该函数file()返回一个包含文件每一行的数组。迭代文件的行非常好。然后在 foreach 循环中,您可以将每一行分解为单个记录。

感谢 Andrew Moore,我建议您使用该功能str_getcsv()而不是explode()

于 2013-02-05T02:53:24.800 回答