【问题标题】:Merge rows with same id in .csv file with php用php合并.csv文件中具有相同id的行
【发布时间】:2012-03-25 14:27:18
【问题描述】:

我有一个这样的 csv 文件,names.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);
 }

有人可以帮我找到正确的解决方案吗,看起来很简单,问题? 提前谢谢!

【问题讨论】:

    标签: php csv merge rows


    【解决方案1】:

    这是我要做的:

    $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";
    }
    

    【讨论】:

      【解决方案2】:

      这个怎么样...

      $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";
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-07-17
        • 1970-01-01
        • 2013-03-07
        • 2021-11-02
        • 2013-10-10
        • 1970-01-01
        • 2020-12-13
        • 2023-03-08
        相关资源
        最近更新 更多