Undefined offset - При работе с split() возникает не то что хотелось бы. Как быть

  • Автор темы Mahinator
  • Дата начала

Mahinator

Guest
Undefined offset - При работе с split() возникает не то что хотелось бы. Как быть

Задача:

Нужно на сайт закидывать ежедневное обновление прайса товаров:
Сделал следующее:

PHP:
<?php
$tr = "price.txt";
/*примерный текст файла price.txt:

1\tabCase
2\tabATX 116-4JA+ ATX 300W - PIV\tab25,50\tabлала\tabкар
3\tabATX 152-4JA+ ATX 300W - PIV\tab25,50\tabлала\tabкар
4\tabATX 221-4JA+ ATX 300W - PIV\tab25,50\tabлала\tabкар
5\tabATX 223-4JA+ ATX 300W - PIV\tab25,50\tabлала\tabкар
6\tabATX 231-4JA+ ATX 300W - PIV black\tab25,50\tabлала\tabкар
7\tabATX 62H-4JA+ ATX 300W - PIV Black\tab25,50\tabлала\tabкар
8\tabATX 7650-4JA+ ATX 300W - PIV\tab27,00\tabлала\tabкар
9\tabATX 7650-4JA+ ATX 300W - PIV  black side panel\tab27,00\tabлала\tabкар
10\tabATX 807-4JA+ ATX 300W - PIV w thermometr silver\tab33,00\tabлала\tabкар
11\tabATX 826-4JA 419C+ ATX 300W - PIV\tab25,50\tabлала\tabкар
12\tabATX 8679-4JA 427C + 657C + ATX 300W - PIV\tab25,50\tabлала\tabкар
13\tabATX 87-4JA+ ATX 300W - PIV\tab27,00\tabлала\tabкар
14\tabATX 92-4JA+ ATX 300W - PIV\tab26,00\tabлала\tabкар

*/
$tov = file ($tr);

$t = 0; // счетчик начинается с нуля
while ($t < count($tov)): // открыли цикл до последнего элемента в массиве

echo $tov[$t]; // выводим строку на экран

echo "<br>";

$t++; // заканчиваем цикл
endwhile;

list ($nom, $tovar, $cena, $k_1, $k_2) = split ("\tab",$tov[$t]);

print ("$nom, $tovar, $cena, $k_1, $k_2");
?>
...

Хочу чтоб была возможность присвоить каждой переменной List каждый столб таблицы и вывести на экран.
Но вместо этого выдает:

Notice: Undefined offset: 14 in Z:\home\ITC.kg\www\price.php on line 33

Notice: Undefined offset: 4 in Z:\home\ITC.kg\www\price.php on line 33

Notice: Undefined offset: 3 in Z:\home\ITC.kg\www\price.php on line 33

Notice: Undefined offset: 2 in Z:\home\ITC.kg\www\price.php on line 33

Notice: Undefined offset: 1 in Z:\home\ITC.kg\www\price.php on line 33

Если кто с этим сталкивался подскажите как решить проблему!
 

rotoZOOM

ACM maniac
вот в этой строчке у тебя t чему равно ?
list ($nom, $tovar, $cena, $k_1, $k_2) = split ("\tab",$tov[$t]);
 

Mahinator

Guest
Автор оригинала: baev
Что в строке 33 написано?
list ($nom, $tovar, $cena, $k_1, $k_2) = split ("\tab",$tov[$t]);

-~{}~ 02.06.05 09:10:

Автор оригинала: rotoZOOM
вот в этой строчке у тебя t чему равно ?
list ($nom, $tovar, $cena, $k_1, $k_2) = split ("\tab",$tov[$t]);
t равно каждой строке из таблицы.
 

baev

‹°°¬•
Команда форума
Что-то код вообще какой-то нереальный:

PHP:
"\tab"
-- тут '\t' это символ табуляции.
Что в текстовом файле?
 

Mahinator

Guest
Автор оригинала: baev
Что-то код вообще какой-то нереальный:

PHP:
"\tab"
-- тут '\t' это символ табуляции.
Что в текстовом файле?
в price.txt содержимое следующее:
1\tabCase
2\tabATX 116-4JA+ ATX 300W - PIV\tab25,50\tabлала\tabкар
3\tabATX 152-4JA+ ATX 300W - PIV\tab25,50\tabлала\tabкар
4\tabATX 221-4JA+ ATX 300W - PIV\tab25,50\tabлала\tabкар
5\tabATX 223-4JA+ ATX 300W - PIV\tab25,50\tabлала\tabкар
6\tabATX 231-4JA+ ATX 300W - PIV black\tab25,50\tabлала\tabкар
7\tabATX 62H-4JA+ ATX 300W - PIV Black\tab25,50\tabлала\tabкар
8\tabATX 7650-4JA+ ATX 300W - PIV\tab27,00\tabлала\tabкар
9\tabATX 7650-4JA+ ATX 300W - PIV black side panel\tab27,00\tabлала\tabкар
10\tabATX 807-4JA+ ATX 300W - PIV w thermometr silver\tab33,00\tabлала\tabкар
11\tabATX 826-4JA 419C+ ATX 300W - PIV\tab25,50\tabлала\tabкар
12\tabATX 8679-4JA 427C + 657C + ATX 300W - PIV\tab25,50\tabлала\tabкар
13\tabATX 87-4JA+ ATX 300W - PIV\tab27,00\tabлала\tabкар
14\tabATX 92-4JA+ ATX 300W - PIV\tab26,00\tabлала\tabкар


тут не принципиально - писать \t или \tab, ведь смысл в том, что list как только встречает знак разделения (в данном случае \tab) записывает поочередно все значения, разделенные \tab'ом, в переменную $nom потом $cena и тд.
 

SiMM

Новичок
>> "\tab"
> тут не принципиально - писать \t или \tab
Mahinator, что-то ты какие-то невероятные вещи рассказываешь.
[m]language.types.string#language.types.string.syntax.double[/m]
 

baev

‹°°¬•
Команда форума
Mahinator
Так в split'е-то строка не как слэш+три буквы воспринимается, а как символ табуляции и две буквы.

Так что "знак разделения" split вообще не "встретит".
 

Mahinator

Guest
Автор оригинала: SiMM
>> "\tab"
> тут не принципиально - писать \t или \tab
Mahinator, что-то ты какие-то невероятные вещи рассказываешь.
[m]language.types.string#language.types.string.syntax.double[/m]
Уверенно спорить не могу, потому что не профи, но!!! в split() насколько я знаю знаком разделения может быть впринципе любой знак : ; ! ? и тд
http://www.php.net/split

PS Я заменил \tab на \t - результат не изменился!!!
 

SelenIT

IT-лунатик :)
rotoZOOM прав. Строчка со сплитом стоит после цикла и пытается обработать $tov[count($tov)] (естественно, не существующий)...
 

confguru

ExAdmin
Команда форума
print_r($tov);

Тебе уже сказали что он вне цикла у тебя..
Учи как работает [m]while[/m]
 
Сверху