Я - прежде всего, CSS и парень HTML, но я недавно рисковал в PHP.
Я не вижу, почему этот сценарий зависает:
$loop_Until = 10;
while($i < $loop_Until)
{
// do some code here
$loop_Until = $loop_Until + 1;
}
Кто-либо может помочь?
Это вызывает цикл 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
Простейшее решение: замените «+» на «-» . Это приведет к завершению цикла. Примерно так:
$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 в начале каждого цикла.
Фиксированный код
$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;
}