关于这个话题已有一些问题,但我还没有找到令人满意的答案。虽然常见的.csv阅读器软件(例如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级,而行的5列是2级。
我试过了
fgetcsv()
无法解析多行字段和
str_getcsv()
无法使用正确的参数在两个维度中进行解析。如何用PHP最好地解析这个.csv文件?
答案 0 :(得分:2)
希望SplFileObject :: fgetcsv()可以帮助您解析CSV文件。在下面提到的链接中,已经给出了示例,因此请使用它并检查其是否正确获取。 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;