我过去一直在使用这个脚本,没问题。我将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
谢谢,
答案 0 :(得分:1)
根据问题中发布的(缺乏)信息,我认为第20行是:
$results[$col][$fields[$k]] = $value;
您的CSV
文件的第一行似乎包含的列少于数据行。
第一行(列名称)存储在$fields
中,它有386列。某些数据行包含超过386列(391,似乎),而$k
从386开始,$fields[$k]
未定义并触发您发布的通知。
解决方案取决于您。您可以通过添加缺少的列名称或从违规行中删除额外值来修复CSV文件。
您还可以修改代码以执行上述操作之一(即时生成一些列名或忽略额外值)。
您还应该检查CSV文件是否已正确编码。也许没有额外的列,fgetcsv()
错误地拆分了行。检查文件中使用的分隔符,引号和转义字符,并确保在调用fgetcsv()
时使用相同的值。