使用list()的未定义偏移量

时间:2014-02-07 14:34:53

标签: php splfileobject

我正在使用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

我有办法解决这个问题吗?也许通过检查数组是否有值?

由于

1 个答案:

答案 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.
}

例如,如果您有数字索引。

这样可以更严格地控​​制将要解析的格式,如果出现问题,可以更快地调试缺少值的位置,或者遵循逻辑。