【问题标题】:PHP - fgetcsv - Delimiter being ignored?PHP - fgetcsv - 分隔符被忽略?
【发布时间】:2010-04-03 19:34:35
【问题描述】:

我正在尝试输出 csv 文件中的每一行,似乎分隔符被忽略了...我确定我的语法在某处有错误,但似乎无法确定它...

CSV 文件如下所示:

ID,Code,Count
TM768889,02001,10
TM768889,02002,10
TM768889,02003,10
TM768889,02004,10
TM768889,02005,10

我正在尝试输出:

   0 - ID,Code,Count
   1 - TM768889,02001,10
   2 - TM768889,02002,10
   3 - TM768889,02003,10
   4 - TM768889,02004,10
   5 - TM768889,02005,10

但是,它输出的是这个:

0 - ID
1 - Code
2 - Count TM768889
3 - 02001
4 - 10 TM768889
5 - 02002
6 - 10 TM768889
7 - 02003
8 - 10 TM768889
9 - 02004
10 - 10 TM768889
11 - 02005
12 - 10

这是我的代码:

  $row = 0;
  if(($handle = fopen($_FILES["Filedata"]["tmp_name"], "r")) !== FALSE) {
              $string = '';
              while(($line = fgetcsv($handle,1000,",")) !== FALSE) {
                    $num = count($line);
                    $row++;
                    for($c=0; $c < $num; $c++) {
                              $string .= $c.' - '.$line[$c].'<br />';
            }
          }     
  fclose($handle);
  echo $string;
  }

【问题讨论】:

    标签: php delimiter fgetcsv


    【解决方案1】:

    为什么要打扰fgetcsv?你只是把这条线吐出来,所以看起来你可以改用fgets

      $row = 0;
      if(($handle = fopen($_FILES["Filedata"]["tmp_name"], "r")) !== FALSE) {
                  $string = '';
                  while(($line = fgets($handle)) !== FALSE) {
                        $row++;
                        $string .= $row.' - '.$line.'<br />';
                }
              }     
      fclose($handle);
      echo $string;
      }
    

    您的问题是您正在为 CSV 文件中的每个值打印一整行,而不是像您想要的那样将整行打印出来。

    【讨论】:

      【解决方案2】:

      首先,您的代码不会打印您粘贴的内容。计数器与 $c 变量不匹配。

      这是我得到的:

      0 - ID
      1 - Code
      2 - Count
      0 - TM768889
      1 - 02001
      2 - 10
      0 - TM768889
      1 - 02002
      2 - 10
      0 - TM768889
      1 - 02003
      2 - 10
      0 - TM768889
      1 - 02004
      2 - 10
      0 - TM768889
      1 - 02005
      2 - 10
      

      如果您的数据文件不是很大,那么我建议您使用 file() 函数将文件加载到数组中。然后你可以遍历数组并输出简单的行的值。

      $lines=file($_FILES["Filedata"]["tmp_name"]);
      foreach($lines as $line) print($line.'<br/>');
      

      如果您随后需要解析该行,那么只需使用explode() 函数来获取每个值。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-12-30
        • 2023-04-03
        • 1970-01-01
        • 2018-03-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多