我的csv文件中有两列:first_column和second_column。我想将第二列中的所有行分组为一个由","分隔的字符串。如果它们在第一列中都有相同的单词,则将它们输出到文本文件中。
first_column second_column
a Chris
a Jake
a Paula
b Anita
b Lionel
b Sheila
期望的输出
a: Chris, Jake, Paula
b: Anita, Lionel, Sheila
这就是我尝试过的。我似乎只得到了second_column的第一个字母。任何指针都会很棒。
$csv_file = fopen("test.csv", "r");
$text_file = fopen("test.txt","w");
$data = array();
if ($csv_file)
{
while (($line = fgets($csv_file)) !== false)
{
$column_1 = $line[0];
$column_2 = $line[1];
if (!empty($column_1))
{
$data [$column_1] = column_2;
}
}
fclose($csv_file);
fclose($text_file);
}
else
{
// error opening the file.
}
//print_r($data);
答案 0 :(得分:2)
这应该适合你:
这里我首先将您的.csv
文件放入包含file()
的数组中。然后我遍历每一行并创建一个数组,其中第一列是键,第二列是子数组的值。
在此之后,您可以使用您想要的预期行的键遍历您创建的数组和implode()
每个子数组。然后,您只需将file_put_contents()
数据保存到.txt
文件中即可。
<?php
$csv_file = "test.csv";
$text_file = "test.txt";
$lines = file($csv_file, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
array_shift($lines);
foreach($lines as $line) {
list($key, $value) = explode(",", $line); //Change your .csv delimiter here, if you use something else than ,
$data[$key][] = $value;
}
foreach($data as $key => $arr)
$content[] = $key . ": " . implode(",", $arr) . PHP_EOL;
file_put_contents($text_file, $content);
?>
答案 1 :(得分:0)
将结果存储在数据数组中,然后将其变为bacj到文本文件应该有效。
$csv_file = fopen("test.csv", "r");
$text_file = fopen("test.txt","w");
$data = array();
if ($csv_file)
{
while (($line = fgets($csv_file)) !== false)
{
$column_1 = $line[0];
$column_2 = $line[1];
if (!isset($data[$column_1]))
{
$data[$column_1] = column_2
} else {
$data[$column_1] = $data[$column_1] .',' . $column_2
}
}
foreach($data as $k=>$d ){
fputs($text_file, "$k: $d") ;
}
fclose($csv_file);
fclose($text_file);
}
else
{
// error opening the file.
}