我有一个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)
问候
$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