0

我有一个 CSV 文件,如下所示:

Header1,Header2,Header3
value1,value2,value3
value11,value12,value13
value21,value22,value23

ETC...

当我使用此代码解析它时:

$csvData = file_get_contents($file_url);
$lines = explode(" ", $csvData);
$array = array();
foreach ($lines as $line) {
    $array[] = str_getcsv($line);
}
dpm($array);

一行的第一个值总是最终成为最后一个标题末尾的一部分: 在此处输入图像描述

编辑:缓存一定有问题,因为它工作正常。

4

3 回答 3

2

对于读取 CSV 文件,explode() 和 file_get_contents() 不是正确的选项。转到fgetcsv 您可以执行以下操作来读取 CSV 文件:

<?php
$row = 1;
if (($handle = fopen("test.csv", "r")) !== FALSE) {
    while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
        $num = count($data);
        echo "<p> $num fields in line $row: <br /></p>\n";
        $row++;
        for ($c=0; $c < $num; $c++) {
            echo $data[$c] . "<br />\n";
        }
    }
    fclose($handle);
}
?>
于 2013-11-12T14:39:15.353 回答
0

您可能希望将换行符分成换行符 ( "\n") 而不仅仅是空格 ( " ")。更好的是,您可能希望使用file()将文件行加载到数组中。更好的是,您可能希望使用SplFileObject类来做到这一点:

<?php
$file = new SplFileObject($file_url);
$file->setFlags(SplFileObject::READ_CSV | SplFileObject::SKIP_EMPTY
    | SplFileObject::DROP_NEW_LINE | SplFileObject::READ_AHEAD);
$data = array();

foreach ($file as $row) {
    $data[] = $row;
}

祝你好运!

于 2013-11-12T14:39:24.387 回答
0

使用file而不是file_get_contents. 这将返回一个数组,每个索引上都有一行输入文件。这将适用于所有可能的换行符。

$lines = file($file_url, FILE_IGNORE_NEW_LINES)
于 2013-11-12T14:42:01.423 回答