PHP:解析 .csv 文件,在字段值中使用换行符(部分引用)

PHP: Parse .csv file with line breaks in field value (partly quoted)

已经有一些关于这个主题的问题,但我还没有找到满意的答案。虽然常见的 .csv reader 软件(例如 Libre Office)可以毫无问题地读取文件 PHP 但在这方面存在问题。

文件的示例部分:

86010800,class,Table Games,,"(10005183, 10005184, 10005185)"
86011100,class,Toy Vehicles – Non-ride,,"(10005192, 10005190, 10005191, 10005193, 10005194, 10005195, 10005196)"
86011000,class,Toys – Ride-on,,"(10005187, 10005188, 10005441, 10005189)"
86010900,class,Toys/Games Variety Packs,,(10005186)
10001686,brick,Airbrushes (Powered),"Definition:
 Includes any products that can be described/observed as a powered 
machine that scatters paint using air pressure and which is used for 
design illustrations, fine art and delicate fine spray applications. The
 machine comprises of a compression or propulsion device to scatter the 
paint.Specifically excludes Spray Paint and Aerosols.Excludes Airbrushing Replacement Parts and Accessories such as Airbrush Control Valves and Airbrush Hoses.",()
10001688,brick,Airbrushing Equipment – Replacement Parts/Accessories,Definition: Includes any products that can be described/observed as a replacement part/accessory for airbrushing equipment.Includes products such as Airbrush Control Valves and Airbrush Hoses.Excludes products such as complete Airbrushes.,(20001349)
10001690,brick,Airbrushing Supplies Other,"Definition:
 Includes any products that may be described/observed as Airbrushing 
Supplies products, where the user of the schema is not able to classify 
the products in existing bricks within the schema.Excludes all currently classified Airbrushing Supplies.",()

如您所见,第 4 列和第 5 列部分被引用,因为它们可能包含换行符,简单值未被引用。

我想要的是一个二维数组,其中一行为级别 1,该行的五列为级别 2。

我试过了

fgetcsv()

无法解析多行字段和

str_getcsv()

使用正确的参数无法在二维中进行解析。如何使用 PHP?

正确解析此 .csv 文件

希望SplFileObject::fgetcsv()能帮助您解析CSV文件。在下面提到的 link 中已经给出了示例,因此请使用它并检查其获取是否正确。 http://php.net/manual/en/splfileobject.fgetcsv.php

编辑:完整代码示例

$file = new SplFileObject('../../temp/file.csv');
$ar = array();
while (!$file->eof()) {
    array_push($ar,$file->fgetcsv());
}
echo '<pre>';
print_r($ar);
echo '</pre>';
die;