使用fgetcsv写入CSV

时间:2011-12-22 19:46:45

标签: php csv fgetcsv fputcsv

我的PHP代码遇到了一些问题。 基本上我有一个CSV列表,我正在使用fgetcsv将该文件读入表中。我要做的是让他们的名字显示为链接,他们点击链接,它调用fputcsv,并在他们的名字旁边放一个。

目前我只有显示部分正常工作。 我不确定从写作部分开始。

非常感谢任何见解。

非常感谢!

  <?php
  $row = 1;
  $handle = fopen("test/list.csv", "r");
  echo("<table>");
  while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
      echo("<tr>\r\n");
      foreach ($data as $index=>$val) {
              echo("\t<td><a href=\"#\">$val</a></td>\r\n");
      }
      echo("</tr>\r\n");
  }
  echo("</table>");
  fclose($handle);
  ?>

1 个答案:

答案 0 :(得分:2)

您无法直接将csv文件视为数据库。您需要有一些方法来指示单击行来自原始csv文件的WHICH行。通过行号,或(最好)每行中的一些唯一ID字段。

我会假装csv文件的第0列是该行的唯一标识符,因此您可以将其用于ouptut:

  foreach ($data as $index=>$val) {
          echo("\t<td><a href=\"update.php?id={$data[0]}\">$val</a></td>\r\n");
  }

然后在update.php脚本中,使用基本的伪代码:

<?php
$id = $GET['id'];

$fh = fopen('test/list.csv', 'rb');
$out = fopen('newlist.csv'', 'wb');
while($row = fgetcsv($fh)) {
   if ($row[0] == $id) {
       $row[xxx] = 1; // write '1' for this row because it's the row that was clicked on
   }
   fputcsv($out, $row); // write out to new file
}

请注意,我正在使用第二个文件来修改输出。这比尝试就地编辑原始csv更安全。完成所有必要的更改后,只需将新文件移到旧文件上即可完成编辑。