使用php逐行解析csv文件

JDe*_*gns 1 php csv

我有一个csv文件,数据行1是这样的标题

 id fname lname email date code pid
Run Code Online (Sandbox Code Playgroud)

然后每行在每个字段名称下面都有数据

3232456454  mike    strong  mike@mike.com   11/8/11 0:00    AU  2540
Run Code Online (Sandbox Code Playgroud)

当我使用文本编辑器看到这个csv时,我看到如下.

3232456454,mike,strong,mike@mike.com,11/8/11 0:00,AU,2540
87876548788,bob,cool,bob@what.com,11/8/11 0:00,RY,2148
23498765,nike,tick,nike@google.com,11/8/11 0:00,TE,5240
Run Code Online (Sandbox Code Playgroud)

现在我想用php读取文件,我希望数据格式与文本文件完全相同.我会将这些数据用于其他目的.我不想用逗号分割所以我不能使用fgetcsv.我尝试使用php文件()打开它,但当我循环它,我没有看到正确的数据.有人可以提出一些建议吗?

如果我这样做,它打印在数组中,每个元素取一个值,我不想要这个..

    $csv = array();
    $lines = file('sample.csv', FILE_IGNORE_NEW_LINES);

    foreach ($lines as $key => $value)
    {
        $csv[$key] = str_getcsv($value);
    } 
print_r($csv)
Run Code Online (Sandbox Code Playgroud)

我尝试使用谷歌代码中的parsecsv库,但这不是必需的,因为我想逐行数据.

我需要忽略输出中的第一行(标题).

如果我能得到这样的输出,这将解决我的问题

Array
(
    [id,fname,lname,email,,data,code,pid] => 3232456454,mike,strong,mike@mike.com,11/8/11 0:00,AU,2540
)

Array
(
    [id,fname,lname,email,,data,code,pid] => 87876548788,bob,cool,bob@what.com,11/8/11 0:00,RY,2148
)
Run Code Online (Sandbox Code Playgroud)

问候

dec*_*eze 9

$csv = file_get_contents($file);
Run Code Online (Sandbox Code Playgroud)

这将获得文件,没有任何转换或拆分或任何东西,只有一个长字符串.

如果要将其拆分为每行的数组,只需执行

$csv = file($file, FILE_IGNORE_NEW_LINES);
Run Code Online (Sandbox Code Playgroud)

没有别的.没有循环,不getcsv,只是file().


但即使你说你对解析CSV不感兴趣,你也在处理一个CSV,所以我会尽快解析它并再次输出,如果有必要,甚至回到CSV.

$fh = fopen($file, 'r');
$header = fgetcsv($fh);

$data = array();
while ($line = fgetcsv($fh)) {
    $data[] = array_combine($header, $line);
}

fclose($fh);

print_r($data);


// outputting:

$out = fopen('php://output', 'w');
fputcsv($out, array_keys($data[0])); // skip this if you don't want headers
foreach ($data as $line) {
    fputcsv($out, $line);
}
fclose($out);
Run Code Online (Sandbox Code Playgroud)

如果未正确识别行结尾,请尝试ini_set('auto_detect_line_endings', true);使用脚本.

请参阅此处获取演示:http://codepad.viper-7.com/t31IEv