Проблемы цикла с условием продолжения PHP

Я - прежде всего, CSS и парень HTML, но я недавно рисковал в PHP.

Я не вижу, почему этот сценарий зависает:

$loop_Until = 10;

while($i < $loop_Until)
{
   // do some code here
   $loop_Until = $loop_Until + 1;
}

Кто-либо может помочь?

5
задан greenie 8 July 2010 в 19:51
поделиться

4 ответа

Это вызывает цикл ifinate, вы захотите взглянуть на цикл php for . http://php.net/manual/en/control-structures.for.php

for($i= 1; $i< $loop_Until; ++$i) {
    // do some code here
}

Вы увеличиваете $ loop_Until каждый раз и никогда не увеличиваете $ i , поэтому $ i всегда будет меньше, чем $ loop_Until

11
ответ дан 18 December 2019 в 05:43
поделиться

Простейшее решение: замените «+» на «-» . Это приведет к завершению цикла. Примерно так:

$loop_Until = 10;

while($i < $loop_Until)
{
    // do some code here
    $loop_Until = $loop_Until - 1;
}

Позвольте мне объяснить, предложить немного лучшее решение и предложить вам несколько альтернатив.

Если мы предположим, что $ i в начале меньше $ loop_Until, то добавление 1 к $ loop_Until со строкой $ loop_Until = $ loop_Until + 1; никогда не приведет к тому, что $ i будет равно или больше, чем $ loop_Until.

Вы должны либо вычесть из $ loop_Until, либо прибавить к $ i.

Вычесть 1 из переменной можно быстро, выполнив, - $ variable . Добавить 1 к переменной можно быстро, выполнив ++ $ variable , поэтому у вас должно быть:

$loop_Until = 10;

while($i < $loop_Until)
{
    // do some code here
    --$loop_Until;
}

Конечно, $ loop_Until звучит как что-то, что вы, возможно, захотите установить один раз, а затем оставьте его без изменений. В этом случае вы можете установить $ i и увеличить его. Поэтому сначала установите для $ i любое значение (меньше, чем $ loop_Until, если вы хотите, чтобы цикл while запускался хотя бы один раз), затем:

$loop_Until = 10;

while($i < $loop_Until)
{
    // do some code here
    ++$i;
}

Между прочим, ++ $ i быстрее, чем $ i ++

Как упоминал Ящерица, цикл for отлично подходит для этого. Два эквивалента цикла for для двух разделов приведенного выше кода - это

for($loop_Until = 10; $i < $loop_Until; --$loop_Until)
{
    // do some code here
}

и

for($loop_Until = 10; $i < $loop_Until; ++i)
{
    // do some code here
}

. Просто убедитесь, что вы проверили, что ваше условие в конечном итоге произойдет, с несколькими числами на листе бумаги или в вашей голове.

Наконец, какое из этих решений вы выберете, будет зависеть от того, хотите ли вы, чтобы $ i или $ loop_Until оставались неизменными.

Если у вас несколько циклов, и вы хотите повторить их все одинаковое количество раз, вероятно, неплохо оставить $ loop_Until нетронутым и сбросить $ i в начале каждого цикла.

1
ответ дан 18 December 2019 в 05:43
поделиться

Фиксированный код

$loop_Until = 10;
$i = 0;

    while($i < $loop_Until)
    {
        // do some code here
        $i = $i + 1;
    }

Объяснение вашего кода:

// A variable called loop until is set to 10
$loop_Until = 10;  

// While the variable i is less than 10
// NOTE:  i is not set in code snippet, so we have no way of knowing what value it is, if it is greater than 10 it might be infinite
while($i < $loop_Until)
{
    // Increment the 10 value up 1 every time, i never changes!
    $loop_Until = $loop_Until + 1;
}
18
ответ дан 18 December 2019 в 05:43
поделиться

while (0! = ($ Loop_until--));

0
ответ дан 18 December 2019 в 05:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: