Ошибка с foreach

proWoke

Новичок
Ошибка с foreach

Выполняю сейчас различные задачки для пхп. Ну и там надо вывести из файла строки, в файле они записанны таким образом
(строка=строка2
строка3=строка4
и т.д.).ь И надо разделить их( т.е. отделить что до знака равно и после знака равно и тд)
Ну вот я когда считываю скриптом и начинаю выводить в цикле, после того как цикл выводится, вылазят какие то ошибки.
Вот сам код:


PHP:
<?
$f = fopen ($fname="data", "rt");
$lines = explode("\n", fread($f, filesize($fname)));
foreach ($lines as $strin) {
preg_match ('/(.*)=(.*)/is' ,$strin, $p);
echo $p[1]."<br>";
echo $p[2]."<br>"; }
?>
и выводится в браузер вот что:

halo
helo
privet
poka
utc
puma
Notice: Undefined offset: 1 in /home/prowoke/Docs/localhost/zadachi/2/index.php on line 6
Notice: Undefined offset: 2 in /home/prowoke/Docs/localhost/zadachi/2/index.php on line 7


Откуда беруться последние 2 строчки? Помогите пожалуйста.
 

proWoke

Новичок
ну там в конце пустой массив появляется, но я не могу понять почему и откуда от берётся
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
патамушта puma\n
 

QQQ

Новичок
Откуда беруться последние 2 строчки? Помогите пожалуйста.
Вспоминаем, что делает explode и пытаемся думать как php. Я знаю, это сложно, поэтому открываем текстовый файл в редакторе и внимательно смотрим в него, листаем итд. Если совсем нихрена не видим - смотрив в hex редакторе.

Если опять совсем не допираем, пробуем:

Код:
if(preg_match ('/(.*)=(.*)/is' ,$strin, $p))
{
   echo $p[1]."<br>";
   echo $p[2]."<br>";
}
else
{
   echo "Какая-то херовая строка |$stin|\n";
}
после чего смотрим исходный код (а не тупо в браузер)

Если опять всё плохо, делаем следующее:
Код:
$f = fopen ($fname="data", "rt");
echo "|".fread($f, filesize($fname))."|";
и опять смотрим исходный код. После бъём себя по лбу и обещаем себе не укорачивать код в одну строчку, пока нормально прогить не научились. Рано понтоваться. )))

Да, всегда пожалуйста ))
 

proWoke

Новичок
Спасибо. Намёки понял плохо :). Но ты наверное о том, что explode разбивает так, что после \n ещё пустота идёт и он её в массив пихает? Правильно понял?
 

QQQ

Новичок
proWoke
explode разбивает всё паравильно
\n - это символ, если чё, по которому происходит разбитие, за ним пустая строка, пустая строка и становится элементом массива
убери последний перевод строки из data и твоя проблема не возникнет
 

proWoke

Новичок
ну я это и имел ввиду

-~{}~ 04.08.10 21:46:

PHP:
<?
$f = file ("data");
foreach ($f as $step) {
preg_match ('/(.*)=(.*)/',$step, $pockets);
echo "<table bordercolor='black' border='1'>";
echo "<tr>";
echo "<td width='80'>$pockets[1]</td>";
echo "<td width='80'>$pockets[2]</td>";
echo "</tr>";
echo "</table>";
}
?>
В общем вот как сделал ( если это кому то может быть интересным:)). Спасибо ещё раз всем.
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Зачем тут регулярки ...
 

proWoke

Новичок
А как ещё слова разделить от знака равно? В строковых функциях я ничего подобного в своей книжке не нашёл, вот и воспользовался регулярными выражениями. Подскажи чем на твой взгляд это лучше реализовать. Буду благодарен за совет.

-~{}~ 05.08.10 02:35:

Всё я разобралсЯ, можно одним explode делать всё. Больше не флужу.
 
Сверху