我正在尝试解析一个CSV文件。
<?php
$url = 'https://flux.netaffiliation.com/feed.php?maff=3E9867FCP3CB0566CA125F7935102835L51118FV4';
$csv = array_map('str_getcsv', file($url), ["|"]);
echo '<pre>'; echo print_r ($csv); echo '</pre>';
?>
这是我得到的一个样本:
[1] => Array
(
[0] => 5016488133494|Ary And The Secret Of Seasons PS4|100001|9.99||Jeu > PS4|https://xht.micromania.fr/?P3CB0566CA125FS1UD41282b0253295V4|https://edge.disstg.commercecloud.salesforce.com/dw/image/v2/BCRB_STG/on/demandware.static/-/Sites-masterCatalog_Micromania/default/dw65159733/images/high-res/100001.jpg?sw=1000|JUST FOR GAMES|JUST FOR GAMES|Explorez le monde merveilleux de Valdi !||new|4.99|||||||2
)
显然,解析器并没有接受每一个"考虑在内。
如果检查您的输出,您会注意到分割在您的第一行起作用。这是因为(奇怪的(PHP每次迭代只使用一次额外的args,所以您需要为每一行指定它们:
array_map('str_getcsv', file($url), ["|", "|", "|", ...]);
这对我来说没有多大意义,因为你不知道你有多少行。我会直接这样称呼它:
$csv = array_map(fn($line) => str_getcsv($line, '|'), file($file));
或者老式:
$csv = array_map(function($line) { return str_getcsv($line, '|'); }, file($file));
这是我建议的一个脚本。作为结果,它组装了csvArray,我希望你能进一步处理:
<?php
$url='https://flux.netaffiliation.com/feed.php?maff=3E9867FCP3CB0566CA125F7935102835L51118FV4';
$file_name = 'csvToParse.csv';
$arrContextOptions=array(
"ssl"=>array(
"verify_peer"=>false,
"verify_peer_name"=>false,
),
);
file_put_contents($file_name, file_get_contents($url, false,
stream_context_create($arrContextOptions)));
$fopenCSVHandle=fopen($file_name, 'r');
$csvArray=array();
if ($fopenCSVHandle !== false){
while (($data = fgetcsv($fopenCSVHandle, 1000, "|")) !== FALSE) {
//echo('<br />single row $data=<br />');
//print_r($data);
$csvArray[]=$data;
}
//echo('<br />We got this $data from CSV:<br />');
//print_r($csvArray);
}
?>