シンプルな名簿を作成(3):while/foreach文

while命令

  • 最も基本的な繰り返し文
  • P.87参照



while (条件式) {
 …繰り返し実行する処理…
}

<?php
$i = 0;  //初期化式
while ($i < count($data)) {
  print('<li>'.$data[$i].'</li>');
  $i++;  //増減式
}
?>
  • 条件が正しい(TRUEである)間は、{…}の中の処理を繰り返す
  • この場合、条件式は「$i < count($data)」で、変数$i が配列$dataのサイズよりも小さい間、処理を繰り返します
  • for命令との違いは、while命令が構文の中にカウンタ変数という考え方を持たない点です
  • よって、while命令では「カウンタ変数」を自分で用意し、明示的に増減させるという手順が必要となります


《完成例》

<?php
$data = array('山田太郎', '鈴木花子', '田中一郎',
  '山本久美子', '斎藤次郎', '佐々木裕子', '佐藤秀雄');
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>PHP入門教室</title>
</head>
<body>
名簿には<?php print(count($data)); ?>人が登録されています。
<ol>
<?php
$i = 0;
while ($i < count($data)) {
  print('<li>'.$data[$i].'</li>'."\n");
  $i++;
}
?>
</ol>
</body>
</html>

foreach命令

  • 配列での利用に特化した繰り返し構文
  • P.91参照



foreach (配列 as 仮変数) {
 …繰り返し実行する処理…
}

<?php
foreach($data as $d) {
  print('<li>'.$d.'</li>'."\n");
}
?>
  • この場合、配列$dataの内容を変数$d にセットしながら、処理を繰り返しています
  • 要素を一時的に保存するための要素(この場合 $d)のことを仮変数と呼びます
  • 配列内容を順番に処理するような場合、for命令よりもforeach命令を使った方がコードがシンプルになります


《完成例》

<?php
$data = array('山田太郎', '横山花子', '田中一郎',
  '山本久美子', '鈴木次郎', '星山裕子', '佐藤勝男');
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>PHP入門教室</title>
</head>
<body>
名簿には<?php print(count($data)); ?>人が登録されています。
<ol>
<?php
foreach($data as $d) {
  print('<li>'.$d.'</li>'."\n");
}
?>
</ol>
</body>
</html>

繰り返し構文の使い分け

  • ひとつの基準として、 foreach > for > while の順番に利用する
  • foreachが最も利用局面が限定された命令で、whileが最も汎用的な、その分処理によってはコードが冗長になりやすい


命令 使いどころ
for 繰り返しの回数を具体的に指定できる場合
while 繰り返しによって条件式の TRUE / FALSE が変化する場合
foreach 配列の内容を順番に処理したい場合

無限ループ
  • 永遠に終わらないループのことを無限ループと呼びます
  • 無限ループにならないように注意する必要があります
  • P.89参照

まとめ

  • while命令は、条件式が正しい間だけ{...}の内容を繰り返します
  • 繰り返し構文の書き方によっては無限ループが発生するので注意が必要です
  • foreach命令は、配列の内容を順番に取り出すときに便利です