php новичок, могу ли я назначить одну и ту же переменную для нескольких циклов

Цикл 1 внутри другого цикла $i переменная для приращения?

for($i=0; $i < 10; $i++)
{
for($i=0; $i < 5; $i++)
{
echo "You are too cute";
}
}

Случай 2: если это не внутри, могу ли я объявить $i для обоих?

как это

for($i=0; $i < 10; $i++)
{

}
for($i=0; $i < 5; $i++)
{

}

2

Решение

Уже есть некоторые ответы, которые просто хороши, но здесь немного другая точка зрения.

Это зависит от того, что вы подразумеваете под «Можно». Вы Можно делать это в том смысле, что это синтаксически правильный код PHP.

for($i=0; $i < 10; $i++)
{
for($i=0; $i < 5; $i++)
{
echo "You will never see this text in your browser.";
}
}

Но поскольку цикл не вводит новую область видимости переменной в PHP, он создает бесконечный цикл.

Внешний цикл будет выполнен один раз, затем внутренний цикл будет сброшен $i в 0увеличить его до 5, верните управление во внешний цикл, который будет выполнен один раз, немедленно вызывая повторный запуск внутреннего цикла, сбрасывая $i в 0 и увеличивая его до 5и так далее, навсегда (по крайней мере, пока не истечет время ожидания вашего сценария). Внешний цикл никогда не может закончиться, потому что внутренний цикл влияет $i так что он никогда не сможет удовлетворить условие выхода из внешнего цикла.

Другими словами, просто используйте другую переменную для внутреннего цикла. Удаление одной целочисленной переменной не будет заметной оптимизацией вашего кода, если это то, что вас беспокоит.

Во втором примере нет причин не использовать повторно $i,

3

Другие решения

Случай 1: Вы получите действительно странный результат, посмотрите его Вот

Как это сделать правильно? Проверь это Вот

for($i=0; $i < 10; $i++){
for($k=0; $k < 5; $k++){
echo "1)".$i." 2)".$k."\n";
}
echo "\n";
}

Дело 2: Работает нормально, как указано в комментариях и других ответах. Но, Могу ли я добавить это, например, в этом примере.

for($i=0; $i < 10; $i++){
echo $i."\n";
}

echo "\n Outside the loop: ".$i." \n";

for($i=0; $i < 5; $i++){
echo $i."\n";
}

Вы можете получить доступ $i еще после цикл произошел. Причина, по которой вы можете использовать $i опять же, потому что вы объявляете это $i =0; опять же, без интереса к другому циклу, который в настоящее время работает (как это происходит в Случай 1).

Вы можете проверить этот пример Вот

3

Случай 1: Нет, вы не можете. вам нужно создать переменную индивидуально для каждого цикла.

for($i=0; $i < 10; $i++)
{
for($j=0; $j < 5; $j++)
{
echo "You are too cute";
}
}

Случай 2: Да, вы можете.

for($i=0; $i < 10; $i++)
{
echo "You are too cute";
}

for($i=0; $i < 5; $i++)
{
echo "You are too cute";
}
1

Случай 1:
Короткий ответ Нет, ты не можешь.
Длинный ответ
Сначала вам нужно понять, что на самом деле является переменной и как на самом деле работает этот цикл.

Каждая переменная на самом деле является ссылкой на память. В вашем примере вы создали переменную с именем $ i, и она не может быть больше или равна 10 после увеличения значения на единицу.
На уровне машины это переводится в адрес в памяти. скажем, например, $ i указывает на случайный адрес 0xF25. Когда вы зацикливаете его и увеличиваете его, следующий адрес становится 0xF30.

Всякий раз, когда вы пишете цикл for, компилятор автоматически назначает фиксированный адрес памяти, и этот адрес ограничивается областью вашей переменной.

Компилятор создает таблицу для этого токена ($ i). В простой форме смотрите ниже пример

$ i (это токен) -> 0xF25 (это значение)

Это значение обновляется, когда вы делаете $ i ++

Во вложенном цикле компилятор назначает ту же таблицу (хотя внешний цикл не может получить доступ к переменным внутреннего цикла). Если компилятор поместит одну и ту же переменную для внутреннего цикла, это будет противоречиво. Поскольку внутренний цикл может начинаться с адреса памяти 0xE21. В том случае, когда значение вашего внешнего цикла увеличивается на единицу, оно будет 0xE22, но, как обсуждалось выше, оно должно быть 0xF30.
Вот почему компилятор не позволяет этого и нам нужно использовать ДЕЛО 2 пример.

1
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector