while文をネスト

広告

while文に限ったことではありませんが、while文の中で実行される処理の中でさらに別のwhile文を記述することが出来ます。

while (条件式1){
  実行する処理;
  実行する処理;

  while (条件式2){
    実行する処理;
  }
}

外側のwhile文の条件式が真(TRUE)だった場合に、ブロック内の処理が実行されます。そして実行する処理の一つとして内側に記述されたwhile文が実行されます。外側のwhile文のブロック内の処理が1回行われる毎に内側のwhile文が繰り返し実行されることになります。

例えば次のような使い方をします。

$i = 0;

while ($i < 3){
  $j = 0;

  while ($j < 3){
    print '(i, j)=('.$i.','.$j.')';
    $j += 1;
  }
  $i += 1;
}

この場合では外側のwhile文が1回実行されるたびに内側のwhile文が3回実行されます。外側のwhile文は3回実行されますので、よって一番内側の処理は合計9回実行されることになります。

このように2つの条件を変化させながら繰り返し処理を行わせることはよく行われる処理です。

サンプルプログラム

では簡単なプログラムで試して見ます。

sample2-1.php

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />
<title>PHPテスト</title>
</head>
<body>

<p>PHPのテストです。</p>

<p>
<?php
$i = 0;

while ($i < 3){
  $j = 0;

  while ($j < 3){
    print '(i, j)=('.$i.','.$j.')<br />';
    $j += 1;
  }
  $i += 1;
}
?>
</p>

</body>
</html>

上記のファイルをWWWサーバのドキュメントルート以下に設置しブラウザからアクセスすると次のように表示されます。

while文をネスト

( Written by Tatsuo Ikura )