Я пытаюсь разобрать файл 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 использует дополнительные аргументы только один раз за итерацию, поэтому вам нужно указать их для каждой строки:
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));
Собирался предложить использовать $csv = array_map('str_getcsv', ($ar = file($url)), array_fill(0, count($ar), '|'))
, но функция стрелки намного элегантнее.
Вот сценарий, который я предлагаю. В результате собирает 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);
}
?>
Если я правильно понимаю, вы помещаете данные из URL-адреса в файл, а затем вы помещаете данные из файла в массив. Это правильно ? Спасибо, этот метод выглядит нормально, но есть некоторые ошибки, например, сразу после [4341][10] или [4345][10]. Не понимаю, почему...
@Guillaume, не могли бы вы сделать скриншот того, что вы подразумеваете под ошибкой? или уточните с кодом, который вы используете, или... что-то дает ошибку. Не совсем понятно мне. И да, способ вы правильно поняли. Кстати, если я печатаю (print_r) данные, в одном из фрагментов данных происходит потеря тега, а остальная часть вывода перечеркивается. Я имею в виду, иногда, в некоторых случаях, если вам нужен чистый текст, возможно, лучше удалить теги.... Поэтому, пожалуйста, уточните, какую ошибку вы имеете в виду.
Возможно полезное чтение - stackoverflow.com/questions/27599767/…