注意:未定义的偏移量

时间:2015-05-20 10:33:07

标签: php csv

我过去一直在使用这个脚本,没问题。我将txt文件转换为csv并且有一些未完成的错误。

function Importcsv($filename) { $row = 0;
$col = 0;

$handle = @fopen($filename, "r");
if ($handle) 
{
    while (($row = fgetcsv($handle, 4096)) !== false) 
    {
        if (empty($fields)) 
        {
            $fields = $row;
            continue;
        }

        foreach ($row as $k=>$value) 
        {
            $results[$col][$fields[$k]] = $value;
        }   
        $col++;
        unset($row);
    }
    if (!feof($handle)) 
    {
        echo "Error: unexpected fgets() failn";
    }
    fclose($handle);
}

return $results; }


$filename = "tm_data.csv";
$csvArray = Importcsv($filename);

foreach ($csvArray as $row)
{
 echo $row['CITY'];
}

如果您有任何想法或发现类似问题,请告诉我。

请看几条错误行 注意:未定义的偏移量:第20行/Applications/XAMPP/xamppfiles/htdocs/tm_marketing/index.php中的386

注意:未定义的偏移量:第20行/Applications/XAMPP/xamppfiles/htdocs/tm_marketing/index.php中的387

注意:未定义的偏移量:第20行/Applications/XAMPP/xamppfiles/htdocs/tm_marketing/index.php中的388

注意:未定义的偏移量:第20行/Applications/XAMPP/xamppfiles/htdocs/tm_marketing/index.php中的389

注意:第20行/Applications/XAMPP/xamppfiles/htdocs/tm_marketing/index.php中未定义的偏移量:390

谢谢,

1 个答案:

答案 0 :(得分:1)

根据问题中发布的(缺乏)信息,我认为第20行是:

 $results[$col][$fields[$k]] = $value;

您的CSV文件的第一行似乎包含的列少于数据行。

第一行(列名称)存储在$fields中,它有386列。某些数据行包含超过386列(391,似乎),而$k从386开始,$fields[$k]未定义并触发您发布的通知。

解决方案取决于您。您可以通过添加缺少的列名称或从违规行中删除额外值来修复CSV文件。

您还可以修改代码以执行上述操作之一(即时生成一些列名或忽略额外值)。

您还应该检查CSV文件是否已正确编码。也许没有额外的列,fgetcsv()错误地拆分了行。检查文件中使用的分隔符,引号和转义字符,并确保在调用fgetcsv()时使用相同的值。