我有两列在我的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
这是我尝试过的。我似乎只收到了第二栏的第一封信。任何提示都可以。
$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);
这应该可以为您工作:
在这里,我首先将.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);
?>
将结果存储在数据数组中,然后将其回写为文本文件应该可以工作。
$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.
}