Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 将csv第一列中具有相同单词的所有行分组_Php_File_Csv - Fatal编程技术网

Php 将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

我的csv文件中有两列:第一列和第二列。我想将第二列中的所有行组合成一个字符串,用“,”分隔,如果它们在第一列中都有相同的单词,那么将它们输出到一个文本文件中

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文件中的第二个字符,而不是第二列。我改变了那条线并做了一些改变,成功地解决了这个问题。