Страница 1 из 1

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

Добавлено: 2009-07-16 0:02:27
Syward
Есть такая конструкция:

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

    $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";}
     }
    }
вот такая конструкция работать уже не желает (выводит на экран последнее найденное значение из массива).
Если ставлю условие - вообще перестает работать...
Собственно, вопрос: это я заработался совсем или это бага?

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

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

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

Добавлено: 2009-07-16 7:21:12
Syward
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>";
выше за цикл и он нормально заработал.
Вот и хочу понять, кто кого не понимает, я пых или пых меня :)

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

Добавлено: 2009-07-16 15:37:27
zg
Syward писал(а):я пых или пых меня
второе вытекает из первого

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

Добавлено: 2009-07-16 17:36:05
Syward
zg писал(а): второе вытекает из первого
Ёмко.
что-то я совсем запутался... Можешь на пальцах объяснить, почему локальная переменная, объявленная в цикле, не удаляется при его завершении? и заодно, почему в пределах этого же цикла не работает unset();?

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

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