2013-03-25 196 views
-2

我对Magento的产品csv文件工作,我有3列的CSV文件中像PHP - 解析一个CSV文件,并写入输出到另一个CSV文件

<pre>Name, description, Color</pre> 
<pre>t-shirt, tshirt description, "green, blue, yellow"</pre> 

现在基于列的第三列的值(颜色)我要输出在一个单独的文件中的每一行表示以这样的方式“new_products.csv”,因此所产生的文件将是像

<p>Name, description, Color</p> 
<pre>t-shirt, tshirt description, green</pre> 
<pre>t-shirt, tshirt description, blue</pre> 
<pre>t-shirt, tshirt description, yellow</pre> 

我已经开始使用此代码

$row = 1; 

if (($handle = fopen("product.csv", "r")) !== FALSE) { 
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) { 
    $num = count($data); 
      $name = $data[0]; 
    $desc = $data[1]; 

    for ($c=0; $c < $num; $c++) { 


     $fp = fopen('new_products.csv', 'w'); 

     if($c == 2){ //if we are at color field 
      $color = explode(',', $data[$c]); 
      $color_count = count($color); 
      for($i=0; $i<$color_count; $i++){ 

       fputcsv($fp, array($name,$desc,$color[$i])); 
      } 

     } 

    } 
      $row++; 
} 
fclose($handle); 
} 

但上述代码仅输出最后一行。

谢谢

+1

你尝试过什么?此外,您可能需要检查['fgetcsv'](http://www.php.net/manual/en/function.fgetcsv.php)和['fputcsv'](http://www.php.net/手动/ EN/function.fputcsv.php)。 – Adi 2013-03-25 07:58:06

+0

这不是一个新问题 - 这里有几个答案。我不会因为你是新的(在代表方面)而失望,但我建议你做一些搜索。 – Basic 2013-03-25 08:09:44

回答

1

最后,我已经能够找到我自己的解决方案。实际上,需要在文件末尾设置文件指针。

$row = 1; 

if (($handle = fopen("test.csv", "r")) !== FALSE) { 
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) { 
    $num = count($data); 
    $name = $data[0]; 
    $desc = $data[1]; 


    for ($c=0; $c < $num; $c++) {    

     if($c == 2){ //if we are at color field 
      $fp = fopen('file.csv', 'a'); //Open for writing only; place the file pointer at the end of the file. 
      $color = explode(',', $data[$c]); 
      $color_count = count($color); 
      for($i=0; $i<$color_count; $i++){ 
       fputcsv($fp, array($name,$desc,$color[$i])); 
      } 
      fclose($fp); 
     } 

    } 

      $row++; 
} 
fclose($handle); 

}