【发布时间】: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 将字符串拆分为一个数组(非关联)。