我有一個大約350行的CSV文件,其中包含各種各樣的供應商,可以分爲服裝,工具,娛樂等類別。使用下面的代碼,我已經能夠打印出我的CSV文件。在PHP中解析CSV文件到MySQL數據庫
<?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數據庫。
你知不知道'LOAD DATA INFILE '? http://dev.mysql.com/doc/refman/5.1/en/load-data.html – 2010-05-26 14:50:35
曾經看過MySQL'LOAD DATA'命令?我會讓MySQL直接處理CSV,將所有內容移動到臨時表中並從那裏更新您的真實數據。爲什麼要在PHP中編寫額外的管道代碼? – Tomalak 2010-05-26 14:52:21
LOAD DATA唯一的問題是,如果他在服務器上執行此操作,他可能沒有執行它的權限。 – prodigitalson 2010-05-26 15:12:10