【发布时间】:2010-05-26 14:46:00
【问题描述】:
我有一个大约 350 行的 CSV 文件,其中包含属于服装、工具、娱乐等类别的各种供应商。使用以下代码,我已经能够打印出我的 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__);
?>
您可能会注意到的第一件事是 list() 中的无关变量。这是因为 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吗? dev.mysql.com/doc/refman/5.1/en/load-data.html -
看过 MySQL
LOAD DATA命令吗?我会让 MySQL 直接处理 CSV,将所有内容移动到临时表中并从那里更新您的真实数据。为什么要在 PHP 中编写额外的管道代码? -
LOAD DATA 的唯一问题是,如果他在服务器上实时执行此操作,他可能没有权限执行它。
-
之前没用过
LOAD DATA,我去看看,谢谢。