2014-02-07 3 views
0

Я разбираю большой файл 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 Notice: Undefined offset: 1 in script.php on line 5

PHP Notice: Undefined offset: 2 in script.php on line 5

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

PHP Notice: Undefined offset: 35 in script.php on line 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. 
} 

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

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

+0

Должен ли я сделать это, хотя для каждого поля? –

+0

У вас есть числовые индексы, или вам нужно получить доступ к таким материалам, как '$ row [" nya "]'? И знаете ли вы, какие индексы присутствуют, или они меняются? – Smar

+0

Не сортирует 'list()' числовой индекс? –

Смежные вопросы