2015-11-08 186 views
1

我试图从一个现有的CSV文件导入一个商店的CSV数据子集。我需要拆分包含多个逗号分隔值的列(第3列,category_id)中的一个项目,然后将其与另一列(Product_id)合并以在导入CSV中生成多行。请参阅以下示例。拆分字段的逗号分隔值

原始CSV

​​

需要它变成一个新的CSV文件

Product_id;category_id  
"1";"2"  
"1","4"  
"1","6" 

我想只是fegetcsv功能的CSV阅读和整个打印输出到一个数组但我不知道下一步该怎么做。

<?php 
$handle = fopen ("articles.csv","r"); 
while (($data = fgetcsv ($handle, 1000, ";")) !== FALSE) { 
$column3[] = $data[3]; 
} 
fclose ($handle); 
//edit: 
print_r($column3); 
?> 

我得到:

Array ([0] => category_id [1] => 1 [2] => 0001 [3] => 2,4,6 
+1

有你想这样做PHP中的具体原因是什么?这是一次性的事情吗? – davejal

+0

为客户做一个自动化的导入解决方案/ cronjob –

回答

2

快速和肮脏的:

$csvData = file('articles.csv'); 
$matches = array(); 
$output = ""; 
foreach($csvData as $csvLine) { 
    if(preg_match('/"(.+)";".+";"(.+)"/', $csvLine, $matches)) 
    { 
     $numbers = explode(',', $matches[2]); 
     foreach($numbers as $number) { 
      $output .= "\"{$matches[1]}\";\"{$number}\"" . PHP_EOL; 
     } 
    } 
} 
+0

嗨,谢谢anwser,但是输出应该将输出的第二个字段分成3个新行。 –

+0

啊对不起误读,会更新我的答案。 – MiDri

+0

我想我需要爆炸为这个或东西提取价值成分离线 –