DESIGNMAP

while文、HTMLブロックを間にはさむwhile文、while文とif文の連携 - WordPressのためのPHP入門

記事公開日:2016年09月07日

WordPressのためのPHP入門

WordPressのテンプレート制作でよくでてくるのがwhile文です。if文と連携するパターンも学びます。

今回学ぶ内容

  • while文の基礎
  • HTMLブロックをはさむwhile文
  • while文とif文の連携
  1. XAMPPのApacheを起動します。すでに起動済みの方はそのままでOKです。
  2. Bracketsを起動します。Bracketsで、[ファイル]メニュー→[新規作成]をクリックします。[ファイル]メニュー→[保存]をクリックします。「htdocs」内の「php_for_wordpress」フィルダ内に、「vol3」フォルダをつくり「sample.php」というファイル名で保存します。
  3. 「sample.php」を以下のようにコードを記述します。保存します。
    <!doctype html>
    <html>
    <head>
    <meta charset="utf-8">
    <title>WordPressテンプレート制作のためのPHP入門</title>
    </head>
    <body>
    <ul>
    <?php
    $counter = 1;
    
    while ($counter <= 10) {
        echo '<li>';
        echo $counter;
        echo '</li>';
        
        $counter++;
    }
    ?>
    </ul>
    </body>
    </html>
  4. Google Chromeを起動して、アドレスバーに「http://localhost/php_for_wordpress/vol3/sample.php」と入力してEnterキーを押します。1から10までの数字が表示されれば成功です。

コードの解説

while文は下記のような書式です。

while (条件式) {
  文
}

条件式がtrueのときに、文が実行されます。ここまではif文と同じです。文が処理されたあと、巻き戻しされて再度条件式が実行されます。またtrueであれば、再度、文が実行されます。文が処理されたあと、また再度条件式が実行されます。あとはこの繰り返しです。条件式がfalseで評価された場合、ブロック({ })の処理は実行されず、処理はブロックの後の行に移ります。

条件式がfalseで判断されない限り、なんども文を実行します。

$counter = 1;で$counter変数に1を代入しています。

while ($counter <= 10) {の<=は比較演算子です。A <= BでAの値がB以下ならばtrueを返します。$counter変数は1ですので、<=はtrueを返します。while(true){となり、ブロック内の文が実行されます。

$counter++;がポイントです。++は1を足す演算子です。$counter変数の値は2になります。

また条件式(while ($counter <= 10) {)に巻き戻しされます。条件が成立しますので、<=はtrueを返し、ブロックの中の処理をおこないます。これがなんども繰り返します。

11回目の条件式の処理の時に、$counter変数の値が11になり<=はfalseを返します。ブロックの処理はとばされ、ブロックの後ろの行に処理が移ります。

まとめると、以下のように$counterの値がかわります。

HTMLブロックを間にはさんだwhile文

  1. Bracketsで、[ファイル]メニュー→[新規作成]をクリックします。[ファイル]メニュー→[保存]をクリックします。「vol3」フィルダ内に、「sample2.php」というファイル名で保存します。
  2. 「sample2.php」を以下のようにコードを記述します。保存します。
    <!doctype html>
    <html>
    <head>
    <meta charset="utf-8">
    <title>WordPressテンプレート制作のためのPHP入門</title>
    </head>
    <body>
    <ul>
    <?php $counter = 1; ?>
    <?php while ($counter <= 10): ?>
    <li><?php echo $counter ?></li>   
    <?php $counter++; ?>
    <?php endwhile; ?>
    </ul>
    </body>
    </html>
  3. Google Chromeのアドレスバーに「http://localhost/php_for_wordpress/vol3/sample2.php」と入力してEnterキーを押します。結果は同じです。1から10までの数字が表示されれば成功です。

コードの解説

WordPressのテンプレート制作ではこちらの記法がよく使われます。

<?php while (条件式) : ?>
   文
<?php endwhile; ?>

if文と同様にPHPブロックが断片化されるのでコードは読みにくくなります。慣れが必要でしょう。

while文とif文の連携

sample2.phpのコードを改造して、2の倍数だけ出力してみます。

  1. Bracketsで、[ファイル]メニュー→[新規作成]をクリックします。[ファイル]メニュー→[保存]をクリックします。「vol3」フィルダ内に、「sample3.php」というファイル名で保存します。
  2. 「p6-3.php」を以下のようにコードを記述します。保存します。
    <!doctype html>
    <html>
    <head>
    <meta charset="utf-8">
    <title>WordPressテンプレート制作のためのPHP入門</title>
    </head>
    <body>
    <ul>
    <?php $counter = 1; ?>
    <?php while ($counter <= 10): ?>
        <?php if ($counter % 2 === 0): ?>
            <li><?php echo $counter; ?></li>
        <?php endif; ?>
        <?php $counter++; ?>
    <?php endwhile; ?>
    </ul>
    </body>
    </html>
  3. Google Chromeのアドレスバーに「http://localhost/php_for_wordpress/vol3/sample3.php」と入力してEnterキーを押します。「2、4、6、8、 10」が表示されれば成功です。

コードの解説

応用なので難しくなりました。while文の中に、if文がはいるパターンです。逆にif文の中にwhile文をいれることも可能です。

<?php if(have_posts()): while(have_posts()): 
the_post(); ?>

はWordPressのテンプレートでよくでてくるコードです。これはif文の中にwhile文がはいっている例です。

if ($counter % 2 === 0):

%は剰余演算子とよばれるものです。A % Bの形でAをBで割った時の余りを求めることができます。今回は$counter変数の値を2で割った余りを取得できます。$counter変数の値が2の倍数のときだけ、余りは0になり===はtrueを返します。

<li><?php echo $counter; ?></li>はif文の内側にあるコードですので、if ($counter % 2 === 0):がtrueのときだけ出力されます。

今回はここまでとします。お疲れ様でした。

↑このページの上に戻る