PHP - fgetcsv - 分隔符被忽略?

时间:2010-04-03 19:34:36

标签: php delimiter fgetcsv

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

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

2 个答案:

答案 0 :(得分: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文件中的每个值打印一整行,而不是像您想要的那样整行。

答案 1 :(得分:1)

首先,您的代码不会打印您粘贴的内容。计数器与$ 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()函数获取每个值。