我正在读取一个 CSV 文件,但其中一些值没有被转义,所以 PHP 读错了。这是一个坏行的例子:
" 635",","AUBREY R. PHILLIPS (1920- ) - 粉彩描绘陡峭河谷中的小屋,可能是北威尔士,签名并注明日期,2000 年,带框,66 厘米 x 48 厘米。另一幅乡村景观,标题为反面“收获时间,萨默塞特”签名并注明日期,87 年,装裱,69 厘米 x 49 厘米。(2) NB - 奥布里·菲利普斯是伍斯特郡的艺术家,曾就读于斯托布里奇艺术学院。","40","60","WAT ","绘画、版画和水彩画",
你可以看到Harvest Time,Somerset在它周围有引号,导致 PHP 认为它是一个新值。
当我在每一行上执行 print_r() 时,虚线最终看起来像这样:
Array
(
[0] => 635
[1] =>
[2] => AUBREY R. PHILLIPS (1920- ) - Pastel depicting cottages in a steep sided river valley, possibly North Wales, signed and dated 2000, framed, 66cm by 48cm. another of a rural landscape, titled verso Harvest Time
[3] => Somerset" signed and dated '87
[4] => framed
[5] => 69cm by 49cm. (2) NB - Aubrey Phillips is a Worcestershire artist who studied at the Stourbridge School of Art."
[6] => 40
[7] => 60
[8] => WAT
[9] => Paintings, prints and watercolours
[10] =>
)
这显然是错误的,因为它现在包含比其他正确行更多的数组元素。
这是我正在使用的 PHP:
$i = 1;
if (($file = fopen($this->request->data['file']['tmp_name'], "r")) !== FALSE) {
while (($row = fgetcsv($file, 0, ',', '"')) !== FALSE) {
if ($i == 1){
$header = $row;
}else{
if (count($header) == count($row)){
$lots[] = array_combine($header, $row);
}else{
$error_rows[] = $row;
}
}
$i++;
}
fclose($file);
}
具有错误数量的值的行被放入$error_rows
,其余的被放入一个大$lots
数组中。
我能做些什么来解决这个问题?谢谢。