[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Условие в if
krasilich
Здравствуйте.

Вот код.

PHP
$accArray = file('account.txt');
    $x = count($accArray)-1; 
    echo $x
; // Выводит нужное число!!
    $i = 0;    
    while 
(true)
    {
      if ($i == $x)
      {
        echo "Выходим<br>":
        exit;
      }
    $i++;
    }


условие в if не выполняется, зацикливаемся. если вместо $x явно указать число тогда все норм.
В чем ошибка?



Спустя 7 минут, 44 секунды (14.07.2009 - 22:29) sergeiss написал(а):
М-да... Весьма "интересный" цикл smile.gif А какова его цель? Если тебе нужно сделать цикл "от 0 до определенного числа" , то тогда сделай по-другому:
PHP
$x = count($accArray)-1; 
    echo $x
; 
    for
( $i = 0;  $i<=$x; $i++)
    {
      // тут что-то делаем
    }
    echo 'Вышли из цикла';

Спустя 5 минут, 21 секунда (14.07.2009 - 22:34) twin написал(а):
see_man
Не надо так. Условием из выхода нужно поставить конц массива, а на if return или break луче...

Спустя 1 минута, 57 секунд (14.07.2009 - 22:36) Nikitian написал(а):
Если count($accArray)==0 то цикл будет бесконечным. Что видимо у вас и происходит. Такое может быть либо если массив пустой, либо файл не открылся и count($accArray) возвращает false.

Спустя 1 минута, 55 секунд (14.07.2009 - 22:38) krasilich написал(а):
Цикл действительно интересный, и For не поможет в моей ситуации.

Вопрос был почему не работает, кто то может это обьяснить?=))

Я не просто так вставил в код эхо с коментарием что оно выводит нужное число.

Спустя 2 минуты, 27 секунд (14.07.2009 - 22:40) sergeiss написал(а):
Если тебе так дорог именно такой цикл, то поставь в самом его начале, перед сравнением, контрольный вывод:
PHP
echo "i=$i, x=$x<br>";

Спустя 2 минуты, 12 секунд (14.07.2009 - 22:42) glock18 написал(а):
Цитата (Nikitian @ 14.07.2009 - 19:36)
Если count($accArray)==0 то цикл будет бесконечным. Что видимо у вас и происходит. Такое может быть либо если массив пустой, либо файл не открылся и count($accArray) возвращает false.


++. если $x > 0 должно когда-нибудь остановиться. чтобы не было проблем, условие надо делать

PHP
if ($i >= $x)


sergeiss, собственно правильно сказал. выход из цикла break или return (уж exit, это перебор, пожалуй) придуман не для таких элементарных ситуаций.

а судя по тому, что я вижу у вас. вам там подойдет элементарно foreach без всяких count и иже с ними.

Спустя 3 минуты, 54 секунды (14.07.2009 - 22:46) krasilich написал(а):
Цитата (glock18 @ 14.07.2009 - 19:42)
Цитата (Nikitian @ 14.07.2009 - 19:36)
Если count($accArray)==0 то цикл будет бесконечным. Что видимо у вас и происходит. Такое может быть либо если массив пустой, либо файл не открылся и count($accArray) возвращает false.


++. если $x > 0 должно когда-нибудь остановиться. чтобы не было проблем, условие надо делать

PHP
if ($i >= $x)


sergeiss, собственно правильно сказал. выход из цикла break или return (уж exit, это перебор, пожалуй) придуман не для таких элементарных ситуаций.

а судя по тому, что я вижу у вас. вам там подойдет элементарно foreach без всяких count и иже с ними.

Вы же не видели весь код=)
Мне нужно выйти из скрипта. А это все происходит в методе обьекта.

Спустя 1 минута, 22 секунды (14.07.2009 - 22:48) sergeiss написал(а):
Цитата (see_man @ 14.07.2009 - 23:46)
Вы же не видели весь код=)

Я что-то пропустил? И весь код, также как и причина делать такой (несуразный) цикл были озвучены???

Спустя 8 минут, 55 секунд (14.07.2009 - 22:57) glock18 написал(а):
see_man
не по существу. что насчет условия и/или foreach?

Спустя 57 секунд (14.07.2009 - 22:58) krasilich написал(а):
проблема решилась с условием $i >= $x

Все-таки может кто-то обьяснить почему так?
Меня больше всего интересуют причины.

Спустя 3 минуты, 6 секунд (14.07.2009 - 23:01) sergeiss написал(а):
Цитата (see_man @ 14.07.2009 - 23:58)
проблема решилась с условием $i >= $x

Все-таки может кто-то обьяснить почему так?
Меня больше всего интересуют причины.

А ты сделал контрольный вывод, как я говорил? По числам можно будет предположить.
Ты же до сих пор так и не озвучил, чему у тебя равен $x smile.gif Потому и приходится гадать.

Спустя 1 минута, 35 секунд (14.07.2009 - 23:02) twin написал(а):
Изначально запускать бесконечный цикл - уже не верное решение. Дальнейшие условия выхода не имеют особого смысла. Нужно определить задачу и решать её более щадящими способами. Один из них предложил я, другой glock18

Спустя 2 минуты, 7 секунд (14.07.2009 - 23:04) krasilich написал(а):
Цитата (sergeiss @ 14.07.2009 - 20:01)
Цитата (see_man @ 14.07.2009 - 23:58)
проблема решилась с условием $i >= $x

Все-таки может кто-то обьяснить почему так?
Меня больше всего интересуют причины.

А ты сделал контрольный вывод, как я говорил? По числам можно будет предположить.
Ты же до сих пор так и не озвучил, чему у тебя равен $x smile.gif Потому и приходится гадать.

Да, делал вывод. при равных x и i условие $i == $x возвращает false. a $i >= $x - true. Либо я чего то не замечаю, либо Вы от меня что то скрываете=)) Ума не приложу в чем дело....

Спустя 1 минута, 8 секунд (14.07.2009 - 23:05) sergeiss написал(а):
Цитата (twin @ 15.07.2009 - 00:02)
дин из них предложил я, другой glock18

Я человек очень скромный.... wink.gif Но лучше будет сказать "один из них предложил я, другой - twin, а третий - glock18".

Спустя 1 минута, 16 секунд (14.07.2009 - 23:07) krasilich написал(а):
Цитата (twin @ 14.07.2009 - 20:02)
Изначально запускать бесконечный цикл - уже не верное решение. Дальнейшие условия выхода не имеют особого смысла. Нужно определить задачу и решать её более щадящими способами. Один из них предложил я, другой glock18

Да все, все, понял я что бесконечный цикл это глупо=) Хотя я их люблю, не знаю почему даже=)

Спустя 2 минуты, 30 секунд (14.07.2009 - 23:09) sergeiss написал(а):
Если в твоём коде заменить двоеточие на точку с запятой, и указать в начале, перед эхом $x=10 (или любое другое число), то работает всё.


Так чему же у тебя равен икс?

Спустя 59 секунд (14.07.2009 - 23:10) glock18 написал(а):
Цитата
Да, делал вывод. при равных x и i условие $i == $x возвращает false. a $i >= $x - true. Либо я чего то не замечаю, либо Вы от меня что то скрываете=)) Ума не приложу в чем дело....


конкретных примеров нет. тебе сказали уже, что все ок, если $x > 0.

Спустя 2 минуты, 17 секунд (14.07.2009 - 23:12) sergeiss написал(а):
Даже если ИКС РАВЕН НУЛЮ, то всё срабатывает.

Спустя 39 секунд (14.07.2009 - 23:13) krasilich написал(а):
Ок, спасибо всем за конструктивную критику. До встречи на форуме=)

Спустя 2 минуты, 18 секунд (14.07.2009 - 23:15) sergeiss написал(а):
see_man - ну уж нет! smile.gif

Ты сначала скажи, чему у тебя равен ИКС, иначе я заснуть не смогу smile.gif

Спустя 47 секунд (14.07.2009 - 23:16) glock18 написал(а):
Цитата (sergeiss @ 14.07.2009 - 20:12)
Даже если ИКС РАВЕН НУЛЮ, то всё срабатывает.

ну да, спутал. в смысле, если count 0 вернет - $x будет == -1. тогда будет цикл бесконечный.

или конечный? пока 32 бит не обнулится... надо смотреть как там себя php поведет.

Спустя 1 минута, 5 секунд (14.07.2009 - 23:17) krasilich написал(а):
Цитата (sergeiss @ 14.07.2009 - 20:15)
see_man - ну уж нет! smile.gif

Ты сначала скажи, чему у тебя равен ИКС, иначе я заснуть не смогу smile.gif

sergeiss икс у меня равен 9. Ты почти угадал=)

Спустя 2 минуты, 53 секунды (14.07.2009 - 23:20) sergeiss написал(а):
Ну хорошо. А запусти такой код, что он выдаст?
PHP
$x=9;
    echo $x.'<br>'; 
    $i 
= 0;    
    while 
(true)
    {
      echo "i=$i, x=$x<br>";
      if ($i == $x)
      {
        echo "Выходим<br>";
        exit;
      }
    $i++;
    }

Спустя 5 минут (14.07.2009 - 23:25) krasilich написал(а):
9
i=0, x=0
i=1, x=1
i=2, x=2
i=3, x=3
i=4, x=4
i=5, x=5
i=6, x=6
i=7, x=7
i=8, x=8
i=9, x=9
Выходим


Мне аж стыдно, хм.......

с
$x = count($accArray)-1;
тоже работает....



Причину я так и не увидел.

Спустя 1 минута, 53 секунды (14.07.2009 - 23:27) sergeiss написал(а):
У меня в коде была одна ошибка маленькая smile.gif

Я написал сначала "i=$i, x=$i<br>", потом исправил на "i=$i, x=$x<br>". Сделай это исправление, плз, и запусти заново!

Спустя 1 минута, 33 секунды (14.07.2009 - 23:29) sergeiss написал(а):
А у тебя в оригинале кода не был указан один знак равенства в сравнении?

PS. Впрочем, это не важно. Тогда бы ты выходил на первом шаге цикла.

Спустя 21 секунда (14.07.2009 - 23:29) twin написал(а):
Цитата
Я человек очень скромный....  Но лучше будет сказать "один из них предложил я, другой - twin, а третий - glock18".

Блин, прости. Банкет дает о себе знать. Действительно, промаргал((((

Спустя 1 минута, 21 секунда (14.07.2009 - 23:30) krasilich написал(а):
Цитата (sergeiss @ 14.07.2009 - 20:27)
У меня в коде была одна ошибка маленькая smile.gif

Я написал сначала "i=$i, x=$i<br>", потом исправил на "i=$i, x=$x<br>". Сделай это исправление, плз, и запусти заново!

Я не копипастил а сам набирал, у меня верно.

Спустя 2 минуты, 13 секунд (14.07.2009 - 23:33) sergeiss написал(а):
Цитата (see_man @ 15.07.2009 - 00:30)
Я не копипастил а сам набирал, у меня верно.

Вот в такой ситуации как раз лучше копипастить, чтобы можно было найти все ошибки, в т.ч. и грамматические, и логические. Да и быстрее это будет.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.