Эта тема на forum.dklab.ru


WiND: list(var1,var2,...varn)=?
Спасибо Дмитрию Котерову, yUAC, Евгению Бондареву за ответы на мои ворпросы.
Уменя тут старый-престарый проблемка...ВОт и онa:
у меня такая ошибка. В инструкции прочитал про конструкцию list. применив её на практике, получилась ошибка, точнее 4 ошибки
вот кусок кода:
while (!feof($fh)) :
$line=fgets($fh, 4096);
list($browser,$ip,$host,$dates,$time) = explode("|", $line);
пишет
Notice: Undefined offset: 4 in z:\home\localhost\www\test\php4\function.inc on line 52

Notice: Undefined offset: 3 in z:\home\localhost\www\test\php4\function.inc on line 52

Notice: Undefined offset: 2 in z:\home\localhost\www\test\php4\function.inc on line 52

Notice: Undefined offset: 1 in z:\home\localhost\www\test\php4\function.inc on line 52
Что делать?
Евгений Бондарев:
WiND:
Сделайте так:

$line = explode("|", $line);
var_dump($line);

и посмотрите все ли поля есть в строке.

Я бы делал немного иначе:

$file = file("filename.txt");
foreach ($file as $v) {
$line = explode("|", $v);
var_dump($line);
}

и обращался бы к элементам массива $line, как к переменным $browser, $ip, etc
Юрий Насретдинов:
explode("|", $line);

Единственное, что это может означать это то, что символ "|" не найден ни разу и поэтому explode возвращает в нулевом значении массива всю исходную строку (молодцы разработчики PHP :))
Евгений Бондарев:
Перенесено из форума: Денвер::Базовый пакет.
Перенесено в форум: Программирование::PHP::Все в кучу.
Дмитрий Котеров:
Ну и я вставлю свою лепту. Если в данном месте Вас не интересует, ошибочна ли очередная строка, напишите просто:

list($browser,$ip,$host,$dates,$time) = @explode("|", $line);
# если не получится, попробуйте так:
# @list($browser,$ip,$host,$dates,$time) = @explode("|", $line);

В дальнейшем же просто проверяйте, правильные ли значения в переменных, или нет.

Чем хорошо такое решение? Тем, что если у Вас, например, есть строка "||||", то ее, наверное, тоже надо считать ошибочной, хотя explode+list для нее сработают корректно. Лучше отлавливать одну ошибку в одном месте, чем в нескольких.

Эта тема на forum.dklab.ru