我有一个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等)?
谢谢!
答案 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文件。