Мне не удается правильно проанализировать файл CSV с "|" разделитель с использованием PHP

Я пытаюсь разобрать файл 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
    )

Судя по всему, синтаксический анализатор не принимает все "|" в учетную запись.

Возможно полезное чтение - stackoverflow.com/questions/27599767/…

Nigel Ren 19.03.2022 08:55
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
1
34
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 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), '|')), но функция стрелки намного элегантнее.

Will B. 19.03.2022 04:52

Вот сценарий, который я предлагаю. В результате собирает 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 30.03.2022 16:00

@Guillaume, не могли бы вы сделать скриншот того, что вы подразумеваете под ошибкой? или уточните с кодом, который вы используете, или... что-то дает ошибку. Не совсем понятно мне. И да, способ вы правильно поняли. Кстати, если я печатаю (print_r) данные, в одном из фрагментов данных происходит потеря тега, а остальная часть вывода перечеркивается. Я имею в виду, иногда, в некоторых случаях, если вам нужен чистый текст, возможно, лучше удалить теги.... Поэтому, пожалуйста, уточните, какую ошибку вы имеете в виду.

Eugene Kapustin 31.03.2022 17:21

Другие вопросы по теме