在csv的第一列中对所有具有相同单词的行进行分组

时间:2015-06-09 10:02:36

标签: php file csv

我的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);

2 个答案:

答案 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.
}