ゼミII実習


ゼミIIで使用しているテキストがあります

動的Webページ作成(その4)PHPプログラミング(その3)


前回作ったファイルを使って復習をしてみましょう。

練習1.これから何度も行う操作です。Apache Webサーバを起動してください。そして前回作ったページ(できればPHPのファイル)を使って、クライアント(インターネットエクスプローラ)からそのページをlocalhostを指定して見る事ができるようにしてください。

まず、自分で試してください。それからモニターを使って説明します。

1.PHPプログラミング(その2)

前回の練習について考えてみましょう。結局次のように配列kuniにデータを用意すれば参加国の国旗と国名を表として出力することができます。ただし、4ヶ国のみデータを入れてあります。

<html>
<head>
<title>
ワールドカップ2006参加国一覧
</title>
</head>
<body>
<?php
$kuni=array('ドイツ' => 'thumb_nail/ger_tn.png',
            'コスタリカ' => 'thumb_nail/crc_tn.png',
            'ポーランド' => 'thumb_nail/pol_tn.png',
            'エクアドル' => 'thumb_nail/ecu_tn.png',
            '' => '_tn.png',
            '' => '_tn.png',
            '' => '_tn.png',
            '' => '_tn.png',
            '' => '_tn.png',
            '' => '_tn.png',
            '' => '_tn.png',
            '' => '_tn.png',
            '' => '_tn.png',
            '' => '_tn.png',
            '' => '_tn.png',
            '' => '_tn.png',
            '' => '_tn.png',
            '' => '_tn.png',
            '' => '_tn.png',
            '' => '_tn.png',
            '' => '_tn.png',
            '' => '_tn.png',
            '' => '_tn.png',
            '' => '_tn.png',
            '' => '_tn.png',
            '' => '_tn.png',
            '' => '_tn.png',
            '' => '_tn.png',
            '' => '_tn.png',
            '' => '_tn.png',
            '' => '_tn.png',
            '' => '_tn.png'
);
print '<h1>ワールドカップ2006参加国一覧</h1>';
print '<hr>';
print '<h3>グループA</h3>';
print '<table border="1">';
foreach($kuni as $key => $value){
  print '<tr>';
  print "<td><img src=\"$value\" alt=\"$value\"></td><td>$key</td>";
  print '</tr>';
}
print '</table>';
?>
</body>
</html>

foreach文を使い配列kuniから国名を$keyで、ファイル名を$valueで取り出し、国旗の画像をimgタグを使用して表示しています。

練習1.残りの国名、国旗の画像も表示できるようにしてください。

さて、ここで問題があります。ページを開いてみるとグループAとだけしか表示されていません。グループAからHまで4ヶ国ずつ区切り、グループごとに表示してみたいと思います。

まず、foreachの前後の文を整理して考えてみましょう。以下のようにしてどのように表示されるか試してください。以下のプログラムは全体のうち変更箇所の部分だけなので、どのように変更したか注意しながらプログラムを直してください。

print '<hr>';
foreach($kuni as $key => $value){
  print '<h3>グループA</h3>';
  print '<table border="1">';
  print '<tr>';
  print "<td><img src=\"$value\" alt=\"$value\"></td><td>$key</td>";
  print '</tr>';
  print '</table>';
}
?>

表示結果を見てわかるように国一つに対しグループ名が表示されています。これから4ヶ国ごとに区切って表示してみましょう。

ここで変数$countを用意しforeach文の中でどのようにカウントされているのか考えてみましょう。次のようにプログラムを書き替えます。

print '<hr>';
$count=0;
foreach($kuni as $key => $value){
  print '<h3>グループA</h3>';
  print '<table border="1">';
  print '<tr>';
  print "<td><img src=\"$value\" alt=\"$value\"></td><td>$key</td><td>$count</td>";
  print '</tr>';
  print '</table>';
  $count=$count+1;
}
?>

表にカウントした数も表示しています。ここで次の式を使ってみましょう。%は余りを求める演算子です。4で割った余りを求めて表に表示しています。

  $amari=$count%4;

プログラムは以下のようになります。

print '<hr>';
$count=0;
foreach($kuni as $key => $value){
  $amari=$count%4;
  print '<h3>グループA</h3>';
  print '<table border="1">';
  print '<tr>';
  print "<td><img src=\"$value\" alt=\"$value\"></td><td>$key</td><td>$amari</td>";
  print '</tr>';
  print '</table>';
  $count=$count+1;
}
?>

表示された表を見て気づいたでしょうか。4で割った余りは0、1、2、3の周期で繰り返されています。これを利用すると4つずつグループの表として区切れそうです。つまり、グループ名とtableタグの最初に関する部分を余りが0、tableタグの最後に関する部分を余りが3の時に表示すればよさそうです。

ここでif文を使ってみましょう。今考えた条件の時だけグループ名とtableタグに関する部分を表示できるようにしてみます。プログラムは以下のようになります。if文の次の()内に条件を書いています。==を使用すれば等しいかどうかの判定を行います。等しい場合に{ }内の処理を行います。

print '<hr>';
$count=0;
foreach($kuni as $key => $value){
  if($count%4==0){
    print '<h3>グループA</h3>';
    print '<table border="1">';
  }
  print '<tr>';
  print "<td><img src=\"$value\" alt=\"$value\"></td><td>$key</td>";
  print '</tr>';
  if($count%4==3){
    print '</table>';
  }
  $count=$count+1;
}
?>

練習2.グループごとにまとまりましたが。まだすべてのグループはグループAで表示されています。それぞれのグループ名を表示するようにしてください。

練習3.表が国旗の大きさや国名の長さによって様々な大きさになっています。同じ形式の表として表示してください。