我正在使用SplFileObject
解析大型CSV文件。此CSV有近100,000条记录和多列。
其中一些列是空的。
我有以下代码:
$file = new SplFileObject($uploadedFile);
$file->setFlags(SplFileObject::READ_CSV);
// ignore the header
$it = new LimitIterator($file, 1);
foreach ($it as $row) {
list(
$email,
$name) = $row;
}
当我运行脚本时,我总是收到错误:
PHP注意:未定义的偏移量:第5行的script.php中为1
PHP注意:未定义的偏移量:第5行的script.php中的2
............
PHP注意:未定义的偏移量:第5行的script.php中的35
第5行是实际的list() = $row
我有办法解决这个问题吗?也许通过检查数组是否有值?
由于
答案 0 :(得分:1)
我是通过
手动检查数据是否存在来完成的foreach ($it as $row) {
if(isset($row[0])) {
$email = $row[0];
} else {
// if you want to handle case where email is not present, just do something here
}
if(isset($row[1])) {
$name = $row[1];
}
// now here you have $email and $name set to values from the array.
}
例如,如果您有数字索引。
这样可以更严格地控制将要解析的格式,如果出现问题,可以更快地调试缺少值的位置,或者遵循逻辑。