我有一个包含数据的csv文件 第1行是这样的标题
id fname lname email date code pid
然后每行都有每个字段名称下面的数据
3232456454 mike strong mike@mike.com 11/8/11 0:00 AU 2540
当我使用文本编辑器看到这个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
现在我想用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)
我尝试使用谷歌代码中的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
)
问候
答案 0 :(得分:9)
$csv = file_get_contents($file);
这将使文件按原样而不进行任何转换或拆分或任何操作,只需一个长字符串。
如果要将其拆分为每行的数组,只需执行
$csv = file($file, FILE_IGNORE_NEW_LINES);
,没有别的。没有循环,没有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);
如果无法正确识别行结尾,请在脚本顶部尝试ini_set('auto_detect_line_endings', true);
。
点击此处查看演示:http://codepad.viper-7.com/t31IEv
答案 1 :(得分:0)
使用fopen和fgets代替,并使用你所在行的计数器,这样就可以忽略第一行:
$c=0;
$data=fopen($file,'r');
while($row=fgets($data)){
//$row is your line as a string
if($c!=0){
//do something with it
echo $row."\n";
}
$c++;
}
答案 2 :(得分:0)
如果无论你做什么,你只能使用fgets()或fgetcsv()获取CSV文件的最后一行,只需尝试将文件内容复制/粘贴到新文件中,然后尝试使用它。
我指的是@Jay似乎有的问题:似乎如果文件是使用Excel 2011 / Mac创建的,则其结构未正确解释。
有关详细信息,请参阅此处:Which encoding opens CSV files correctly with Excel on both Mac and Windows?