【问题标题】:how to prevent php fgetcsv skipping first row如何防止 php fgetcsv 跳过第一行
【发布时间】:2015-06-02 10:36:08
【问题描述】:

我有这个函数,它逐行读取 csv 文件并在每行的第一列中查找特定标签,然后如果找到标签,它将将该找到的标签旁边的所有列读取到数组中,直到列值为空。它以前可以正常工作,但最近我注意到它开始跳过文件中的第一行。

如果我在文件顶部添加一个空行,它会很好地读取该行,但我如何让它再次从第一行读取?

我用的是PHP 5.5.18版本,不久前升级了php版本,如果是PHP版本bug降级不是我的解决方案...

是否有任何替代功能或强制它从第一行读取的方法,或者关于如何实现这一点的建议?

function getDataByLabel($label){

   if(($filePointer = fopen($this->path, "r"))!==FALSE){

       //reading each line
        while (($data = fgetcsv($filePointer, 0, ",",'"')) !== FALSE) {

            if(trim(strtolower($data[0]))==trim(strtolower($label))){ 

               $i=0;
               $c=1;

        // if column is not empty we add this value to an array
               while(!empty($data[$c])){
                    $label = trim(ucfirst(strtolower($label)));
                    $this->param[$label][$i] = $data[$c];
                    $i++;
                    $c++;
                }

            }

        }
    }
}

【问题讨论】:

  • 你确定它跳过了第 1 行吗?这听起来很不寻常。
  • 是的,我敢肯定,在 php 升级之前它可以正常工作
  • 任何替代解决方案,有人吗?
  • 使用 fgets。这会将一行读入字符串。然后,您可以使用 explode 将字符串拆分为一个数组(非关联)。

标签: php fopen skip fgetcsv


【解决方案1】:

当您将 csv 文件保存为 UTF8-with Signature 时,它​​将跳过第一行。使用 Emeditor,另存为 UTF8-Without Signature,不会跳过第一行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多