ぽかぽかコード日和

とっても暑い夏の日にプログラミングはじめました☀️

【PHP】数字でピラミッドを作る

PHPのfor文のループで図形を作成するコードをまとめてみました。

応用して組み合わせると、さまざまな図形を作成できます。

はじめに(行数の制御)

全体で3行の図形を作成したいとき

for($a = 1; $a <= 3; $a ++){
 // ここに各行のコードを記述していく
    echo '<br>'; //各行ごと改行する
}

1.階段式

1
12
123

と表示したいときは

    for($b = 1; $b <= $a; $b++){
        echo $b;
    }
  • 1行目の
    1周目は、b=1で$b<=$a(1<=1)が真となるため、$bが表示される。
    2周目は、b=2で$b<=$a(2<=1)が偽となるため、表示されずループは終了する。
    そのため1行目は「1」のみ表示される。

  • 2行目の
    1周目は、b=1で$b<=$a(1<=2)が真となるため、$bが表示される。
    2周目は、b=2で$b<=$a(2<=2)が真となるため、$bが表示される。
    3周目は、b=3で$b<=$a(3<=2)が偽となるため、表示されずループは終了する。
    そのため2行目は「12」が表示される。

  • 3行目の
    1周目は、b=1で$b<=$a(1<=3)が真となるため、$bが表示される。
    2周目は、b=2で$b<=$a(2<=3)が真となるため、$bが表示される。
    3周目は、b=3で$b<=$a(3<=3)が真となるため、$bが表示される。
    4周目以降(今回はa<=3までのため)は、$b<=$a(4<=3)が偽となり表示されず、ループは終了する。
    そのため3行目は「123」が表示される。

数字を降順にする

1
21
321

と表示したいときは

    for($c = 3; $c >= 4-$a; $c--){
       echo $c-(3-$a);
    }
  • 1行目の
    1周目は、c=3で$c>=4-1が真となるため、3-(3-1)で1が表示される。
    2周目は、c=2で$c<=4-1が偽となるため、表示されずループは終了する。
    そのため1行目は「1」のみ表示される。

  • 2行目の
    1周目は、c=3で$c>=4-3が真となるため、3-(3-2)で2が表示される。
    2周目は、c=2で$c<=4-2が真となるため、2-(3-2)で1が表示される。
    3周目は、c=1で$c<=4-2が偽となるため、表示されずループは終了する。
    そのため2行目は「21」が表示される。

  • 3行目の
    1周目は、c=3で$c>=4-3が真となるため、3-(3-3)で3が表示される。
    2周目は、c=2で$c>=4-3が真となるため、2-(3-3)で2が表示される。
    1周目は、c=1で$c>=4-3が真となるため、1-(3-3)で1が表示される。
    4周目以降(今回はa<=3までのため)は、$c>=4-3が偽となりループは終了する。
    そのため3行目は「321」が表示される。

ピラミッドを降順にする

123
12
1

と表示したいときは

    for($d = 1; $d >= 4-$a; $d++){
       echo $d;
    }
  • 1行目の
    1周目は、d=1で$d>=4-1が真となるため、$dが表示される。
    2周目は、d=2で$d<=4-1が真となるため、$dが表示される。
    3周目は、d=3で$d<=4-1が真となるため、$dが表示される。
    4周目以降(今回はa<=3までのため)は、$d<=4-1が偽となるため、表示されずループは終了する。
    そのため1行目は「123」が表示される。

  • 2行目の
    1周目は、d=1で$d>=4-2が真となるため、$dが表示される。
    2周目は、d=2で$d<=4-2が真となるため、$dが表示される。
    3周目は、d=3で$d<=4-2が偽となるため、表示されずループは終了する。
    そのため2行目は「12」が表示される。

  • 3行目の
    1周目は、d=1で$d>=4-3が真となるため、$dが表示される。
    2周目は、d=2で$d<=4-3が偽となるため、表示されずループは終了する。
    そのため3行目は「1」のみ表示される。

ピラミッドと数字を降順にする

321
21
1

と表示したいときは

    for($e = 4-$a; $e >= 1; $e--){
       echo $e;
    }
  • 1行目の
    1周目は、e=4-1で3>1が真となるため、$eが表示される。その後デクリメントされてe=2となる。
    2周目は、e=2で2=>1が真となるため、$eが表示される。 その後e=1となる。
    3周目は、e=1で1=>1が真となるため、$eが表示される。 その後e=0となる。
    4周目以降(今回はa<=3までのため)は、$e>=1が偽となるため、表示されずループは終了する。
    そのため1行目は「321」が表示される。

  • 2行目の
    1周目は、e=4-2で2>1が真となるため、$eが表示される。その後e=1となる。
    2周目は、e=1で1=>1が真となるため、$eが表示される。 その後e=0となる。
    3周目は、$e=>1が偽となるため、表示されずループは終了する。
    そのため2行目は「21」が表示される。

  • 3行目の
    1周目は、e=4-3で1>1が真となるため、$eが表示される。その後e=0となる。
    2周目は、$e=>1が偽となるため、表示されずループは終了する。
    そのため3行目は「1」のみ表示される。

2.文字数は固定する

123
456
789

と表示したいときは

$z = 1;
for($x = 1; $x <= 3; $x ++){    //行数を制御
    for($y = 1; $y <= 3; $y ++){  //文字数を制御
        echo $z;
        $z ++; //zを1ずつ増加させる
    }
    echo '<br>'; //行ごとに改行
  • 数字を降順にしたいときは、
    $z=9;と定義して、デクリメントに変える。

参考にしたサイト

https://qiita.com/ta-k/items/903d9ece52bdbfd6553d