【问题标题】:How to combine rows with the same id from a csv with php如何将csv中具有相同id的行与php结合起来
【发布时间】:2013-03-07 14:16:19
【问题描述】:

我有一个包含两列“id”和“name”的 csv,我想合并共享相同 id 的行并用逗号分隔它们。

id      name
39695   NFL: Cowboys @ Giants
39699   NFL: Colts @ Bears
39699   NFL: Steelers @ Broncos
39699   NFL: Eagles @ Browns
39699   NFL: Panthers @ Buccaneers

进入

id      name
39695   NFL: Cowboys @ Giants
39699   NFL: Colts @ Bears, NFL: Steelers @ Broncos, NFL: Eagles @ Browns, NFL: Panthers @ Buccaneers

我只需要一个回显或一个新的 .csv 文件。

感谢您的帮助。

**编辑

<"?php

$lines = file('sport3.csv');

foreach($lines as $line)
{
list($id, $name) = explode(',', $line);
$merged[$id][] = $name;
}

foreach($merged as $id => $vals)
{
echo '"' . $id . '", "' . implode(',', $vals) . '\"\n';
}
?>

【问题讨论】:

  • 向我们展示你目前拥有的东西。
  • $lines = file('sport3.csv'); foreach($lines as $line) { code list($id, $name) = explode(',', $line); $merged[$id][] = $name; } foreach($merged as $id => $vals) { echo '"' . $id . '", "' . implode(',', $vals) . '\"\n'; }
  • 请返回并编辑问题并将您的代码放入问题中

标签: php excel sorting csv merge


【解决方案1】:

在 PHP 中使用专为 CSV 设计的函数会更安全:

// parse thru data
$mergedData = array();
$handle = fopen('sport3.csv', 'r');
if (!$handle) throw new Exception("Can't open original CSV file");
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
    list($id, $name) = $data;
    if (empty($mergedData[$id])) $mergedData[$id] = array();
    $mergedData[$id][] = $name;
}
fclose($handle);

// save merged data
if (count($mergedData) > 0) {
    $handle = fopen('sport3-merged.csv', 'w');
    if (!$handle) throw new Exception("Can't open CSV file for merged data");
    foreach($mergedData as $id => $vals) {
        array_unshift($vals, $id);
        if (!fputcsv($handle, $vals)) throw new Exception("Can't write data to merged CSV file");
    }
    fclose($handle);
}

希望对您有所帮助。

【讨论】:

  • 我似乎无法实现这个,你介意看看这个页面吗? people.rit.edu/cak5074/536/class/typecal.html
  • 您的 php 代码没有被执行。尝试使用 .php 扩展名而不是 .html。如果这不起作用,您必须与站点系统管理员交谈,告诉您为 php 代码使用什么扩展或允许它首先被执行。
猜你喜欢
  • 1970-01-01
  • 2012-03-25
  • 2019-05-25
  • 2018-11-22
  • 2020-01-23
  • 1970-01-01
  • 2021-07-05
  • 2016-11-03
  • 1970-01-01
相关资源
最近更新 更多