что-то тут не так

И всё прочее, что касается HTML
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Аватара пользователя
Syward
мл. сержант
Сообщения: 81
Зарегистрирован: 2008-07-06 22:27:33
Откуда: Mytischi
Контактная информация:

что-то тут не так

Непрочитанное сообщение Syward » 2009-07-16 0:02:27

Есть такая конструкция:

Код: Выделить всё

    $arr = @file('/patch/to/file/file.txt') or die ('К сожалению,  временно недоступно.');
    $var1 ="<b>н/д</b>";
    $var2="<b>н/д</b>";
    $var3="<b>н/д</b>";
    $var4="<b>н/д</b>";
    $var5="<b>н/д</b>";
    foreach ($arr as $lines => $line) {
$out = explode("\t", $line);
     if (strtoupper($out[2])==$l[4]) {
     $var1=$out[1];
     $var2=number_format($out[2], 2, '.', ' ');
     $var3=$out[3];

     $var4=$out[4];
     if ($var1==''){$var1="not found";}
     $var5=$out[5];
     if ($var6=='value') {$var6="defined value";}

        if($var7==0) {$var7="";} else {$var7="text";}
     }
    }
оно работает, но:

Код: Выделить всё

    $arr = @file('/patch/to/file/file.txt') or die ('К сожалению,  временно недоступно.');
    foreach ($arr as $lines => $line) {
$out = explode("\t", $line);
     if (strtoupper($out[2])==$l[4]) {
     $var1=$out[1];
     $var2=number_format($out[2], 2, '.', ' ');
     $var3=$out[3];

     $var4=$out[4];
     if ($var1==''){$var1="not found";}
     $var5=$out[5];
     if ($var6=='value') {$var6="defined value";}

        if($var7==0) {$var7="";} else {$var7="text";}
     }
    }
вот такая конструкция работать уже не желает (выводит на экран последнее найденное значение из массива).
Если ставлю условие - вообще перестает работать...
Собственно, вопрос: это я заработался совсем или это бага?
Существует рoвнo oдин интуитивнo пoнятный интерфейс - сoска. Все остальные oсваиваются путем oбучения или методом тыка...©

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

Re: что-то тут не так

Непрочитанное сообщение zg » 2009-07-16 5:07:03

Syward писал(а):if (strtoupper($out[2])==$l[4]) {
откуда у тебя взялась переменная $l?
Syward писал(а):Собственно, вопрос: это я заработался совсем или это бага?
включи E_ALL и будет тебе щастье :smile:
Syward писал(а):(выводит на экран последнее найденное значение из массива).
чем она выводит? кроме die() тут нет операторов вывода :pardon:

Аватара пользователя
Syward
мл. сержант
Сообщения: 81
Зарегистрирован: 2008-07-06 22:27:33
Откуда: Mytischi
Контактная информация:

Re: что-то тут не так

Непрочитанное сообщение Syward » 2009-07-16 7:21:12

zg писал(а): откуда у тебя взялась переменная $l?
из за пределов цикла, выше присваивается
zg писал(а): включи E_ALL и будет тебе щастье :smile:
дык он отрабатывает, просто $var не обнуляет...
zg писал(а): чем она выводит? кроме die() тут нет операторов вывода :pardon:
оно ниже за циклом выводится :

Код: Выделить всё

echo <<<TEXT
   $var1<br>
   $var2<br>
   $var3<br>
   $var4<br>
   $var5<br>
TEXT;
там по логике должно быть: выводим строку из базы, в которой есть $l[4], открываем file.txt и смотрим, есть ли в нем $l[4].
Если есть - эксплодим строку из файла по табу и выводим на экран.
Так вот, он отрабатывает только если строка найдена:(... если нету - выводит последнюю найденную. Т.е. не обнуляется переменная $var. Если же $var я объявляю в пределах цикла, он вообще работать перестает, выводит то, что я ему объявил, игнорируя условие.
Цикл отрабатывает ~сотню раз...
выход нашел методом среднепотолочного тыка, вывел

Код: Выделить всё

$var1 ="<b>н/д</b>";
выше за цикл и он нормально заработал.
Вот и хочу понять, кто кого не понимает, я пых или пых меня :)
Существует рoвнo oдин интуитивнo пoнятный интерфейс - сoска. Все остальные oсваиваются путем oбучения или методом тыка...©

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

Re: что-то тут не так

Непрочитанное сообщение zg » 2009-07-16 15:37:27

Syward писал(а):я пых или пых меня
второе вытекает из первого

Аватара пользователя
Syward
мл. сержант
Сообщения: 81
Зарегистрирован: 2008-07-06 22:27:33
Откуда: Mytischi
Контактная информация:

Re: что-то тут не так

Непрочитанное сообщение Syward » 2009-07-16 17:36:05

zg писал(а): второе вытекает из первого
Ёмко.
что-то я совсем запутался... Можешь на пальцах объяснить, почему локальная переменная, объявленная в цикле, не удаляется при его завершении? и заодно, почему в пределах этого же цикла не работает unset();?
Существует рoвнo oдин интуитивнo пoнятный интерфейс - сoска. Все остальные oсваиваются путем oбучения или методом тыка...©

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

Re: что-то тут не так

Непрочитанное сообщение zg » 2009-07-16 18:49:10

Syward писал(а):Можешь на пальцах объяснить, почему локальная переменная, объявленная в цикле, не удаляется при его завершении?
потому что цикл не объявляет локальное адресное пространство.
Syward писал(а):и заодно, почему в пределах этого же цикла не работает unset();?
дак ты его и не используешь, ни в цикле, ни после