关于条目的奇怪之处来自fgetcsv()方法

时间:2013-01-14 07:55:34

标签: php fgetcsv

我的php代码如下所示,示例中的CSV文件如下所示:

Widget1,蓝色,10美元,有库存

Widget2,红色,12美元,缺货

Widget3,绿色,14美元

<?PHP

    $file_handle = fopen("widgets.csv", "r");

    while (!feof($file_handle) ) {

        $line_of_text = fgetcsv($file_handle, 1024);

        $counter = count($line_of_text)."<br />";

        echo $counter;

        for($i=0; $i<$counter; $i++){
            echo $line_of_text[$i];
        }

        echo "<br />";

    }

    fclose($file_handle);

?>

当我运行代码时,我得到以下结果:

4
Widget1 blue $10 have stock
4
Widget2 red $12 out of stock
3
Widget3 green $14
1

我真的无法弄清楚为什么最后有一个'1'?为什么$counter数组在最后一个循环中有一个元素?而且我也无法使用$line_of_text[0]回显元素。

任何人都知道为什么会这样?提前谢谢!

2 个答案:

答案 0 :(得分:0)

fgetcsv的最后一次通话会返回boolean (false)结果。当你试图计算它时,你得到1。

我将其替换为PHP file function

$lines = file("widgets.csv");

foreach ($lines as $line) {

   $line_of_text = str_getcsv($line);

   $counter = count($line_of_text)."<br />";
   echo $counter;

   for($i=0; $i<$counter; $i++){
        echo $line_of_text[$i];
   }
    echo "<br />";

}

答案 1 :(得分:0)

你需要的只是

$handle = fopen("log.txt", "r");
while ( ($data = fgetcsv($handle, 1024)) !== FALSE ) {
    if(!array_filter($data))
        continue;
    $counter = count($data);
    echo "$counter <br />\n";
    echo implode(" ", $data);
    echo "<br />\n";
}
fclose($handle);

输出

4 
Widget1 blue $10 have stock
4 
Widget2 red $12 out of stock
3 
Widget3 green $14