Php loop - тот же цикл увеличивается, а затем уменьшается

1

Итак, мой текущий куд:

<?php 
$x=1;
 while($x<=512)
{
    echo $x.'<br>';
    $x=$x*2;
}
while($x>=1)
{
    echo $x.'<br>';
    $x=$x/2;
 }
?>

В результате получается следующее:
1
2
4
8
16
32
64
128
256
512
1024
512
256
128
64
32
16
8
4
2
1

Но то, что я пытаюсь сделать, - это сделать один цикл, связанный с целыми двумя циклами while, которые он сейчас находится. Мне было интересно, есть ли способ для обоих: Increment and Decrement внутри одного цикла в PHP? Если да, объясните, пожалуйста, с помощью фрагмента кода и объясните. Спасибо.

  • 0
    Почему ты хочешь это сделать? Не будет ли удваивать переменную, а затем делить ее пополам, эффективно отменить ее, давая вам бесконечный цикл?
  • 0
    Можно ли увеличивать и уменьшать в цикле, да. Вы можете делать все внутри цикла, что вы можете делать вне цикла. Можете ли вы объединить их в один цикл, да (я бы запустил две переменные, увеличивающие одну, уменьшив другую и объединив выходные данные в строку для последующего отображения или изменив цикл for с заданным количеством итераций и двигаясь вверх / вниз в этом ). Однако иногда лучше просто использовать два цикла, даже если просто для ясности кода.
Показать ещё 5 комментариев
Теги:
loops

3 ответа

0
Лучший ответ

Это в значительной степени то, о чем я говорил. Тем не менее сохраняется часть цикла в то же самое, что и у вас. Просто увеличивайте/уменьшайте и сохраняйте вывод в другую переменную, чтобы позднее было эхо.

<?php
$x = 1;
$y = 1024;
$outputX = '';
$outputY = '';

while($x <= 512){
    $outputX .= "{$x}<br>";
    $outputY .= "{$y}<br>";

    $x *= 2;
    $y /=2;

}

echo $outputX;
echo $outputY;
//need to output the last value of $y because the loop misses the last iteration of the second while loop.
echo $y;
  • 0
    Ах, я понимаю, что вы имеете в виду, теперь определенно делает это немного сложнее, спасибо
0

Проверьте, достигнут ли верхний предел. Если это так, выполните код деления.

$x=1;
$reverse = 0;
 while($x<=1025 && $x>=1)
{
    echo $x.'<br>';
    if($x == 1024){ $reverse= 1;}
    if($reverse == 0) {
        $x=$x*2;
    } else {
        $x=$x/2;       
    }
}
0

Вы можете сделать это так, но я не вижу практичности этого.

$x=1;
$r=1048576;
while($x<=1048576){
    if($x<=$r)
        echo $x.'<br>';
    else
        echo $r.'<br>';
    $x*=2;
    $r/=2;
}
  • 0
    @Crinkelycrewms Точно так же, как это спасибо за доказательство, что это может быть сделано, но почему $ r должно быть 1048576?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню