У меня есть файл CSV, назовите его data.csv
, который выглядит следующим образом:Как объединить значения из нескольких строк с одинаковым идентификатором в запятую с уникальным идентификатором
id,position,data
1,1,Data text
1,2,Data text 2
1,3,Data text 3
2,1,Data text x
2,2,Data text y
Что мне нужно, чтобы сростить значения в поле data
в одном для всех строк с одинаковыми id
. Затем напечатайте эти вновь полученные строки в другом CSV-файле.
Мне удалось упорядочить значения в массиве, но при преобразовании в файл CSV он сохраняет только один из них.
Вот мой код
$file = 'data.csv';
$tsvFile = new SplFileObject($file);
$tsvFile->setFlags(SplFileObject::READ_CSV);
$tsvFile->setCsvControl(",");
foreach ($tsvFile as $line => $row) {
if ($line > 0) {
$newData[$row[0]] = array('id'=>$row[0], 'position'=>$row[1], 'data'=>$row[2]);
$newData[$row[1]] = $row[2];
}
}
//
echo '<pre>';
var_dump($newData);
//
$fp = fopen('data2.csv', 'w');
foreach ($newData as $fields) {
fputcsv($fp, $fields);
}
fclose($fp);
В конце концов, результирующий файл CSV должен выглядеть следующим образом:
id,data
"1","Data text, Data text 1, Data text 2"
"2","Data text x, Data text y"
Просто для того, чтобы получить прямо: у вас есть CSV ('data.csv'), который выглядит как первый выделенный блок, и вы хотите разобрать его в другом CSV-файле, который выглядит как последний выделенный блок? – Overflowh
точно. Thx ... – Dario