我的CSV文件如下:
Header1,Header2,Header3
value1,value2,value3
value11,value12,value13
value21,value22,value23
等...
当我使用此代码解析它时:
$csvData = file_get_contents($file_url);
$lines = explode(" ", $csvData);
$array = array();
foreach ($lines as $line) {
$array[] = str_getcsv($line);
}
dpm($array);
一行的第一个值总是最后成为最后一个标题末尾的一部分:
编辑:缓存一定存在问题,因为它运行正常。
答案 0 :(得分:2)
对于读取CSV文件,explode()和file_get_contents()不是正确的选项。转到fgetcsv 您可以在下面执行以下操作来阅读CSV文件:
<?php
$row = 1;
if (($handle = fopen("test.csv", "r")) !== FALSE) {
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
$num = count($data);
echo "<p> $num fields in line $row: <br /></p>\n";
$row++;
for ($c=0; $c < $num; $c++) {
echo $data[$c] . "<br />\n";
}
}
fclose($handle);
}
?>
答案 1 :(得分:0)
您可能希望将行拆分为换行符("\n"
),而不仅仅是空格(" "
)。更好的是,您可能希望使用file()
将文件行加载到数组中。更好的是,您可能希望使用SplFileObject
类来执行此操作:
<?php
$file = new SplFileObject($file_url);
$file->setFlags(SplFileObject::READ_CSV | SplFileObject::SKIP_EMPTY
| SplFileObject::DROP_NEW_LINE | SplFileObject::READ_AHEAD);
$data = array();
foreach ($file as $row) {
$data[] = $row;
}
祝你好运!
答案 2 :(得分:0)
使用file
代替file_get_contents
。这将返回一个数组,每个索引上有一行输入文件。这将适用于所有可能的新行字符。
$lines = file($file_url, FILE_IGNORE_NEW_LINES)