【问题标题】:writing to CSV using fgetcsv使用 fgetcsv 写入 CSV
【发布时间】:2012-01-26 09:29:15
【问题描述】:

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

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

任何见解将不胜感激。

非常感谢!!

  <?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);
  ?>

【问题讨论】:

    标签: php csv fgetcsv fputcsv


    【解决方案1】:

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

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

      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 更安全。进行任何必要的更改后,只需将新文件移到旧文件上即可完成编辑。

    【讨论】:

    • @Mark B 谢谢!现在我知道从哪里开始了。对于显示部分,我遇到了问题......如何在显示 CSV 时跳过唯一标识符?我的 CSV 文件如下所示: 1、Kevin Johnson 2、Steve Jobs 3、Bill Gates 4、Steve Woz 如何使用 fgetcsv 隐藏 1、2、3、4? while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) { echo("&lt;tr&gt;\r\n"); foreach ($data as $index=&gt;$val) { echo("\t&lt;td&gt;&lt;a href=\"test/test.php?id={$data[0]}\"&gt;$val&lt;/a&gt;&lt;/td&gt;\r\n"); }
    • fgetcsv 逐行解析 csv 并返回单个字段的数组。这意味着 $row[0] 依次是 1,2,3,4 的东西,而 $row[1] 是名称。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-08
    • 2012-10-27
    • 2018-09-19
    • 1970-01-01
    • 1970-01-01
    • 2019-05-02
    相关资源
    最近更新 更多