将.csv文件中具有相同id的行与php合并


Merge rows with same id in .csv file with php

我有一个类似的csv文件,名称.csv:

"id","name"
"1","John"
"2","Joe"
"3","Peter"
"4","Frank"
"5","Bill"
...
"2","Steve"
"5","James"
"2","Mark"
"4","Anthony"

我想将具有相同"id"的"行"合并,以便得到以下结果:

"id","name"
"1","John"
"2","Joe , Steve , Mark"
"3","Peter"
"4","Frank , Anthony"
"5","Bill , James"

我想用php语言来做这件事,但我没有得到解决方案。我自己做了一些代码,但这对我的服务器主机来说很有用(循环中的循环):

$myFile = "merged-names.csv";
$fh = fopen($myFile, 'w') or die("can't open file");
if (($handle = fopen("names.csv", "r")) !== FALSE) 
{
  $line = fgets($handle);
  $val = explode(",", $line);
  $max = (count($val))/2;
  for ($i=0; $i <= $max; $i+2)
  {
    $id = $val[$i];
    $name = $val[$i+1];
    $stringData = "'"".$id."'"".",";
    fwrite($fh, $stringData);
    $stringData = "'"".$name."'"";
    fwrite($fh, $stringData);
    for ($e=0; $e <= $max; $e+2)
    {
  if (strcmp($id, $val[$e]) == 0)
  {
        if($i != $e)
    {
      $stringData = "'"".$val[$e+1]."'"";
      fwrite($fh, $stringData);
        }
  }
    }
    $stringData = "<br>";
    fwrite($fh, $stringData);
  }
fclose($handle);
 }

有人能帮我找到解决这个看起来很简单的问题的正确方法吗?提前谢谢!

以下是我要做的:

$lines = file('merged-names.csv');
foreach($lines as $line)
{
    list($id, $name) = explode(',', $line);
    $id = trim($id, '"');    
    $name = trim($name, '"');
    $merged[$id][] = $name;
}
foreach($merged as $id => $vals)
{
    echo '"' . $id . '", "' . implode(',', $vals) . "'"'n";
}

这个怎么样。。。

$temp = array();
if (($handle = fopen("names.csv", "r")) !== FALSE) {
    while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
        $name = $data[1];
        $id = $data[0];
        if (!isset($temp[$id]))
            $temp[$id] = array();
        $temp[$id][$name] = 1;
    }
    fclose($handle);
}
foreach ($temp as $k => $v) {
    echo $k.","."'"".implode(",", array_keys($v))."'""."'n";
}