PHP MySQL DB CSV dosyasını ayrıştırma

1 Cevap php

Ben vb giysileri düşmek satıcılarının her türlü, Araçlar, Eğlence, bir 350-astarlı CSV dosyası var. Kategorileri. Benim CSV dosyasını yazdırmak mümkün olmuştur aşağıdaki kodu kullanarak.

<?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__); 
?>

Muhtemelen göreceksiniz ilk şey) (listesindeki yabancı vars olduğunu. bu, çünkü nasıl excel tablo / csv dosyası olduğunu:

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.

Unutulmaması gereken bir şey de "Giyim" kategorisinde listelenen gibi son satırı iki virgül ile başlar olmasıdır.

Benim endişe ben CSV çıktı yanlış hakkında gidiyorum olmasıdır.

Should I be using a foreach loop instead of this list way?
Should I first get rid of any unnecessary blank columns?

Ben kullanabilirsiniz gelişmeler yüzden MySQL DB bu verileri almak için hazır olabilir, bulabileceğiniz herhangi bir kusurları bildiriniz.

1 Cevap

Lütfen CSV genel yapısının emin değil im - iki hatları dayalı kural varsayımlar yapmak zor ... ama aşağıdaki gibi bir şey çalışması gerekir:

$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

}