PHP爆炸多行

时间:2013-02-05 02:49:09

标签: php csv explode

  

可能重复:
  How to create an array from a CSV file using PHP and the fgetcsv function

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

  

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...
  }

谢谢!

5 个答案:

答案 0 :(得分:3)

您应该使用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
}

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

答案 1 :(得分: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];
    }
}

答案 2 :(得分:0)

计算.txt文件的行数,使用foreach()一次获取一行,爆炸行

答案 3 :(得分:0)

按新线爆炸

$fields = explode("\n", $contents);

答案 4 :(得分:0)

试试这个:

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

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

感谢Andrew Moore,我建议您使用函数str_getcsv()而不是explode()