Скрипт импорта PHP CSV

#php #csv

#php #csv

Вопрос:

Я пытаюсь импортировать файл CSV и загрузить его в свою базу данных. Сначала я протестировал это с некоторыми фиктивными данными, которые не содержали специальных символов. Но теперь, когда у меня есть окончательный CSV, он, похоже, неправильно читает столбцы. Я видел много ответов на другие вопросы, имеющие похожие проблемы, но не смог решить мою проблему с этим.

Чего я хочу добиться: один массив для каждой строки CSV-файла, с каждым столбцом в качестве индекса массива. Кажется, я не могу понять это:/ Спасибо за вашу помощь!

Это скриншот первых 5 строк файла CSV:

скриншот первых 5 строк файла CSV

Код:

 // csv settings
$filename = 'files/games3.csv';
$fp = fopen($filename, "r");
// insert for each row of csv file
$i=0;
while (($row = fgetcsv($fp)) != FALSE)
{
    // first 5 rows only (just for testing)
    if ($i <= 5){
        //$arrIm = implode(";", $row);
        //$arrEx = explode(";", $arrIm);
        echo '<pre>';
        var_dump($row);
        echo '</pre>';
        $i  ;
    }
    else{
        die('done');
    }
}
fclose($fp);
  

Результат:
введите описание изображения здесь

Комментарии:

1. вы просматривали свой CSV-файл с помощью текстового редактора и проверяли, действителен ли он?

2. Hi @FranzGleichmann . Да, я открыл его в своем текстовом редакторе. Это не дает мне никаких ошибок…

3. это может быть, но является ли содержимое действительным CSV? у меня есть опыт работы с некоторыми программами для работы с электронными таблицами, которые плохо генерируют CSV

4. Ваш последний столбец со всеми разрывами строк должен быть заключен в кавычки " . Единственный известный мне способ заставить его работать. И fgetcsv() понадобится ; в качестве разделителя.

5. Я только что запустил тест скрипта по ссылке , и этот тест выдает файл с 3811 ошибками…

Ответ №1:

Похоже, что ваш product_description_long содержит символы возврата каретки / перевода строки.

Это упростит анализ ваших данных: https://github.com/synappnz/php-csv

 include "csv.php";
$csv = new csv(file_get_contents("filename.csv"));
$rows = $csv->rows();
foreach ($rows as $row)
{
  // do something with $row
}