Php 将csv第一列中具有相同单词的所有行分组
我的csv文件中有两列:第一列和第二列。我想将第二列中的所有行组合成一个字符串,用“,”分隔,如果它们在第一列中都有相同的单词,那么将它们输出到一个文本文件中Php 将csv第一列中具有相同单词的所有行分组,php,file,csv,Php,File,Csv,我的csv文件中有两列:第一列和第二列。我想将第二列中的所有行组合成一个字符串,用“,”分隔,如果它们在第一列中都有相同的单词,那么将它们输出到一个文本文件中 first_column second_column a Chris a Jake a Paula b Anita b Lionel b Sheila 期望输出 a: Chris
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);
这应该适合您: 在这里,我首先使用
file()
将您的.csv
文件放入一个数组中。然后我循环遍历每一行并创建一个数组,其中第一列是键,第二列是子数组的值
在此之后,您可以通过创建的数组和内爆()。然后,您可以将数据与文件一起保存到.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.
}
你的csv行之间用什么分隔,用哪个分隔符?@Rizier123新行?对不起,写得不太清楚我是说你的列,用逗号,分号?那么这个问题我们在哪里?@Rizier123显然我看到了我的错误是fgets而不是fgetcsv,它给了我csv文件中的第二个字符,而不是第二列。我改变了那条线并做了一些改变,成功地解决了这个问题。