Я пытаюсь импортировать CSV для магазина с подмножеством данных из существующего файла CSV. Мне нужно разделить один элемент из столбца (столбец 3, category_id
), который содержит несколько значений, разделенных запятыми, а затем объединить их с одним другим столбцом (Product_id
) для создания нескольких строк в CSV импорта. См. Следующие примеры.
Оригинальный CSV
Product_id;article_id;category_id;
"1";"0001";"2,4,6"
Нужна она в новый 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
Быстро и грязно:
$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;
}
}
}