Разбор файла CSV в БД MySQL в PHP - PullRequest
0 голосов
/ 26 мая 2010

У меня есть CSV-файл на 350 листов со всеми поставщиками, которые относятся к категориям Одежда, Инструменты, Развлечения и т. Д. Используя следующий код, я смог распечатать мой CSV-файл.

<?php
    $fp = fopen('promo_catalog_expanded.csv', 'r'); 
    echo '<tr><td>'; 
    echo implode('</td><td>', fgetcsv($fp, 4096, ',')); 
    echo '</td></tr>'; 
    while(!feof($fp)) { 
        list($cat, $var, $name, $var2, $web, $var3, $phone,$var4, $kw,$var5, $desc) = fgetcsv($fp, 4096); 
        echo '<tr><td>'; 
        echo $cat. '</td><td>' . $name . '</td><td><a href="http://www.' . $web .'" target="_blank">' .$web.'</a></td><td>'.$phone.'</td><td>'.$kw.'</td><td>'.$desc.'</td>' ;
        echo '</td></tr>'; 
    } 

    fclose($file_handle); 
    show_source(__FILE__); 
?>

Первое, что вы, вероятно, заметите, это посторонние переменные в списке (). это из-за того, как файл Excel / CSV-файл:

Category,,Company Name,,Website,,Phone,,Keywords,,Description  
,,,,,,,,,,  
Clothes,,4imprint,,4imprint.com,,877-466-7746,,"polos, jackets, coats, workwear, sweatshirts, hoodies, long sleeve, pullovers,  t-shirts, tees, tshirts,",,An embroidery and apparel company based in Wisconsin.
,,Apollo Embroidery,,apolloemb.com,,1-800-982-2146,,"hats, caps, headwear, bags, totes, backpacks, blankets, embroidery",,An embroidery sales company based in California.

Следует отметить, что последняя строка начинается с двух запятых, так как она также указана в категории «Одежда».

Меня беспокоит то, что я неправильно понял вывод CSV.

Должен ли я использовать цикл foreach вместо этого способа списка?
Должен ли я сначала избавиться от ненужных пустых столбцов?

Пожалуйста, сообщите о любых недостатках, которые вы можете найти, об улучшениях, которые я могу использовать, чтобы я мог быть готов импортировать эти данные в базу данных MySQL.

1 Ответ

1 голос
/ 26 мая 2010

Я не уверен в общей структуре вашего CSV - сложно сделать предположения о правилах на основе двух строк ... но должно сработать что-то вроде следующего:

$fp = fopen('promo_catalog_expanded.csv', 'r');

// normalize the column names
$columns = array_change_key_case(fgetcsv($fp, 0, ','), CASE_LOWER);
$lastCategory = null;

while(false !== ($data = fgetcsv($fp, 0, ','))) {
   $data = array_combine($columns, $data); // make it an assoc array

   // test if category has a value - if it doesnt use the last category
   if(empty($data['category']) && null !== $lastCategory ){
      $data['category'] = $lastCategory;
   }

   // if we have started a new set of entries for a cat, we need to make it the $lastCategory
   if($lastCategory !== $dataCategory && null !== $data['category']) {
      $lastCategory = $data['category'];
   }

   // your sql to do the insert

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...