Неопределенное смещение с помощью list()

Я анализирую большой файл CSV, используя SplFileObject, Этот 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: Неопределенное смещение: 1 в script.php в строке 5

Примечание PHP: Неопределенное смещение: 2 в script.php в строке 5

    ............

Примечание PHP: Неопределенное смещение: 35 в script.php в строке 5

Строка 5 - фактическая list() = $row

Есть ли способ, которым я могу это исправить? Может быть, проверив, что массив имеет значения?

Спасибо

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

например, если у вас есть числовые индексы.

Это дало бы вам более строгий контроль над форматом того, что будет анализироваться, и в случае проблем быстрее отлаживалось там, где точно отсутствует значение, или иным образом следовало бы логике.

Другие вопросы по тегам