PHP代码无法正确解析我的CSV文件

时间:2013-12-05 22:03:17

标签: php excel parsing csv

我有一个CSV文件,我想用PHP解析它:

Access_Code,Home_Address, Work_Address

1, 100 Broad St, 100 Main St

2, 200 Broad St, 200 Main St

3, 300 Broad St, 300 Main St

这是我的代码:

$file = fopen($target_path,"r");
while(!feof($file))
{
$groups2 = fgetcsv($file,",");
print_r($groups2);
}
fclose($file);

我不想要任何幻想,只是想弄清楚为什么会这样:

输出:

Array ( [0] => Access_Code [1] => Work_Address [2] => Home_Address 1 [3] => 100 Broad St [4] => 100 Main St 2 [5] => 200 Broad St [6] => 200 Main St 3 [7] => 300 Broad St [8] => 300 Main St )

我应该有一个包含 12 对象的数组,不是吗?为什么我的第一列被第三列吞没(即Home_Address 1,200 Main St 3等)?

谢谢!

2 个答案:

答案 0 :(得分:2)

我输入了您的示例数据和代码,它返回了以下数组。检查您的数据是否真的采用这种格式。如果是,则使用file()读入数组并检查eol字符,因为file()保留了eol字符(请参阅下面的代码)。

Array ( [0] => Access_Code [1] => Home_Address [2] => Work_Address ) 
Array ( [0] => 1 [1] => 100 Broad St [2] => 100 Main St ) 
Array ( [0] => 2 [1] => 200 Broad St [2] => 200 Main St ) 
Array ( [0] => 3 [1] => 300 Broad St [2] => 300 Main St )

数据:

Access_Code,Home_Address, Work_Address
1, 100 Broad St, 100 Main St
2, 200 Broad St, 200 Main St
3, 300 Broad St, 300 Main St

检查eol字符:

$a = file("../x.txt");
$hex='';
for ($i=0; $i < strlen($a[0]); $i++)
{
    var_dump(ord($a[0][$i]));
}

答案 1 :(得分:2)

正如wrikken在评论中提到的,并建议/链接到。

你的行尾是错误的。

行结尾通常由回车符+新行\r\n(窗口),回车符\r(mac)或新行\n(linux / unix)完成。< / p>

尝试使用PHP顶部的ini_set("auto_detect_line_endings", true);,如Wrikken指向此项目的PHP手册的链接所示。

如果这不能解决问题,请检查是否正确设置了分隔符(通常是行结尾),在那里创建CSV文件。