如何在PHP中将数组值写入csv文件?

时间:2010-11-27 08:11:18

标签: php file fopen fwrite

我有一个结构类似于$data = array{0=>'abc',1=>xyz,2=>tqs}

的数组

现在我需要将这些值写入csv文件。我需要在第一列中显示每个值,并且每次在新插入时都显示新行以及之前已有的值。

下面是我正在使用的代码,但每次执行时我都会得到文件中的最后一个值:

for ($c=0; $c < $num; $c++) {
      echo $data[$c];
   echo  $query = "select prod_sku,prod_name 
    from
      tbl_product
    where 
     prod_sku = '".$data[$c]."'";
     $result = mysql_query($query);
     $row = mysql_fetch_array($result);
     if(empty($row)){
     print_r($row);
     echo 'test';
     $fp = fopen("file.csv", "w");
     print_r($data[0]);

      fputcsv($fp, $data[0]);
      fclose($fp);


  } 

我如何使用PHP实现这一目标?

2 个答案:

答案 0 :(得分:5)

问题是你在for循环中正在进行fopen,所以每次循环运行时,你的文件都会被重写。将fopenfclose移到循环外部即可。像这样;

$fp = fopen("file.csv", "w");
for ($c=0; $c < $num; $c++)
{
     $query = "select prod_sku,prod_name from tbl_product where prod_sku = '".$data[$c]."'";
     $result = mysql_query($query);
     $row = mysql_fetch_array($result);

     fputcsv($fp, $data);
} 
fclose($fp);

答案 1 :(得分:0)

如果您使用MySQL,则可以使用SELECT ... INTO OUTFILE

SELECT prod_sku, prod_name
INTO OUTFILE '/tmp/products.csv'
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
ESCAPED BY '\\'
LINES TERMINATED BY '\n'
FROM tbl_product
WHERE 1

http://dev.mysql.com/doc/refman/5.0/en/select.html