4. 配列について
今日は、配列について詳しくご説明いたします。
■配列とは
今までのレッスンで説明不要かと思いますが、念のため。
大量のデータを扱うとき、一つ一つに変数名を連番で付けて、これを扱うとなると、
大変なことになってしまうので、配列という変数の集まりを使用することが重要に
なってきます。
-----------------------------------------------------------------
配列を使用しない場合
T.【100個の変数を初期化する】
$a1 = '壱';
$a2 = '弐';
$a3 = '参';
$a4 = '四';
↓
$a100 = '壱百';
U.【100個の変数を表示させる】
print $a1;
print $a2;
print $a3;
print $a4;
↓
print $a100;
-----------------------------------------------------------------
これでは大変ですね。
そこで、配列を使用すると、
-----------------------------------------------------------------
T.【100個の変数を初期化する】
$a = array('壱','弐','参','四','伍','六','七','八','九', ・・・ '壱百');
U.【100個の変数を表示させる】
for ($i = 0; $i < count($a); $i++) {
print $a[$i];
}
-----------------------------------------------------------------
と簡潔に記述することができます。
この配列の初期化ですが、
-----------------------------------------------------------------
$a[0] = '壱';
$a[1] = '弐';
$a[2] = '参';
$a[3] = '四';
↓
$a[99] = '壱百';
-----------------------------------------------------------------
と同じ意味です。
配列の添え字は 0 番目から始まっていることに注意してください。
■配列への代入
配列のいろいろな代入のしかたをご紹介します。
$Array = array( 1 , 2 , 3 , 4 , 5 );
これは、
$Array[0] =1;
↓
$Array[4] =5;
といった具合に先頭から順番に格納されます。
$Array[0] = "Hello World!!";
配列 $Arrayの先頭の要素 $Array[0] に文字列 "Hello World!!" が格納されます。
$Array[5] = "Hello World!!";
配列 $Arrayの 6つめの要素 $Array[5] に文字列 "Hello World!!" が格納されます。
しかし、0 〜 4の要素に何も入れていないと、プログラムが確保するメモリ領域が
無駄になるので、注意してください。
$Array[] = "Test Sample.";
添え字を省略すると、配列 $Arrayの最後の要素の次に追加します。
-----------------------------------------------------------------
※メモリ領域とは
プログラムが動作するサーバマシンのメモリの領域と考えていただいて結構です。
メモリというのは、一時記憶装置のことで、マシンのメモリが高いほど、処理速度が
速いと考えられます。
よくマシンを購入する時に、メモリ800Mバイトとか書いてあるのを見かけると
思いますが、これのことです。
したがって、無駄なメモリ領域を大量に使用してしまうと、処理速度が遅くなると
考えてください。
-----------------------------------------------------------------
$Array = array();
空の配列を作成します。
配列を空にするときにも使用します。
$Array = $Array1;
$Array1の複製を$Arrayとして作成します。
この時$Arrayの大きさは$Array1に合わせられます。
■参照
次に示すサンプル配列を元に、配列を参照するやり方を見てみます。
-----------------------------------------------------------------
$week = array('Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat' );
-----------------------------------------------------------------
上記の配列を作成したとします。
print $week[0];
print $week[1];
print $week[6];
添え字は 0 から順番に 6 までで参照できます。配列の個数自体は 7 ですが、
添え字は 0 から始まるため、6 までの参照となります。
print count($week);
count()を使用する事によって、その配列の大きさを取得する事が出来ます。
表示結果は 7 になります。
print_r($week);
配列の全ての要素を出力します。
表示 →
Array ( [0] => Sun [1] => Mon [2] => Tue [3] => Wed [4] => Thu [5] => Fri [6] => Sat )
■配列操作配列の全ての要素に処理を行う
配列参照のループで、別の方法をご紹介します。
foreachを使用する
foreach ( $配列名 as $変数名 ) {
処理
}
こうすると、$変数に順番にその配列の中身を取り出して使用することができます。
-----------------------------------------------------------------
$week = array('Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat' );
foreach ($week as $tmp) {
print $tmp;
}
-----------------------------------------------------------------
array()やcount()は、配列関数になります。関数については、別の機会にまとめて
ご紹介します。
★今日のまとめサンプルプログラム
-----------------------------------------------------------------
<HTML>
<BODY>
<?
$sum = 0;
$array = array(1,2,3,4,5,6,7,8,9,10);
foreach ($array as $tmp) {
$sum += $tmp;
}
$sum /= count($array);
print "平均は " . $sum . "です\n";
?>
</BODY>
</HTML>
-----------------------------------------------------------------
■解説
foreachを使用し変数に値を足し込んで行き最後に平均を求めます。
$sum += $tmp;
は
$sum = $sum + $tmp;
と同じ意味ですね。つまり、$sumに配列の中身を順番に足していっています。
$sum /= count($array);
は
$sum = $sum / count($array);
と同じ意味ですので、平均を計算する式になります。
★課題
1. 以下の データを配列に格納し、HTML中にfor文を使用して表示するプログラムを
作成してください。
'Jan','Feb','Mar','Apr','Jun','Jul','Aug','Sep','Oct','Nov','Dec'
2. 以下は、ある11人のテストの点数です。11人の合計点と平均点をHTML中に
表示するプログラムを作成してください。
75点、80点、88点、49点、69点、77点、93点、72点、81点、58点、72点
★前回の課題の解答
1. 以下のフローを満たすプログラムを作成してください。
→下のサンプルを参照してください。
-----------------------------------------------------------------
<HTML>
<BODY>
<?
// (1)
$a = 32;
$b = 56;
// 掛け算の結果が150以上ならば「True」を表示、そうでなければ「False」を表示
if ($a * $b >= 150) {
print "True";
}
else {
print "False";
}
print "<br>";
// 掛け算の結果が200未満ならば「True」を表示、そうでなければ「False」を表示
if ($a * $b < 200) {
print "True";
}
else {
print "False";
}
print "<br>";
// 足し算の結果が80以上、かつ掛け算の結果が150未満ならば「True」を表示、
// そうでなければ「False」を表示
if ($a + $b >= 80 && $a * $b < 150) {
print "True";
}
else {
print "False";
}
print "<br>";
// 足し算の結果が90以下、または掛け算の結果が180以下なら「True」を表示、
// そうでなければ「False」を表示
if ($a + $b <= 90 || $a * $b <= 180) {
print "True";
}
else {
print "False";
}
print "<br>";
// (2)
$a = array("This ", "is ", "", "a ", "test.");
// for文を用いて、配列の中身を全て表示
for ($i = 0; $i < count($a); $i++) {
print $a[$i];
}
print "<br>";
// 2番目(添え字は1)の中身が空の場合は「True」を表示、そうでなければ「False」を表示
if ($a[1] == "") {
print "True";
}
else {
print "False";
}
print "<br>";
// 3番目(添え字は2)の中身が空で、かつ4番目(添え字は3)の中身がtextより小さい場合は
// 「True」を表示、そうでなければ「False」を表示
if ($a[2] == "" && $a[3] < "text") {
print "True";
}
else {
print "False";
}
print "<br>";
// (3)
$a = array(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20);
// for文を用いて、偶数のみを表示
for ($i = 1; $i < count($a); $i += 2) {
print $a[$i] . " ";
}
print "<br>";
// for文を用いて、5から14までを表示
for ($i = 4; $i < 14; $i++) {
print $a[$i] . " ";
}
print "<br>";
// while文を用いて、1から9までを表示
$i = 0;
while ($i < 9) {
print $a[$i++] . " ";
}
print "<br>";
// foreach文を用いて、3で割り切れる数字のみを表示
foreach ($a as $tmp) {
if ($tmp % 3 == 0) {
print $tmp . " ";
}
}
print "<br>";
// (4)
$a = array(32,646,308,431,639,78,143,169,490,144,612,113,327,51);
// for文を用いて、偶数のみを表示
for ($i = 0; $i < count($a); $i++) {
if ($a[$i] % 2 == 0) {
print $a[$i] . " ";
}
}
print "<br>";
// foreach文を用いて、3で割り切れない数字を表示
foreach ($a as $tmp) {
if ($tmp % 3) {
print $tmp . " ";
}
}
print "<br>";
// while文を用いて、2で割った答えを表示
$i = 0;
while ($i < count($a)) {
print $a[$i++] / 2 . " ";
}
print "<br>";
// for文を用いて、5で割った余りを表示
for ($i = 0; $i < count($a); $i++) {
print $a[$i] % 5 . " ";
}
print "<br>";
?>
</BODY>
</HTML>
-----------------------------------------------------------------
■解説
上のサンプルのように、$c = $a * $bとしなくても、
if ($a * $b >= 150)
と書くことができます。
また、割り切れない数字を判定する場合、
if ($tmp % 3)
とやっていますが、割り切れる場合は、3で割った余りが 0 となりますので、
偽となり、割り切れない数字のみ、{ }の中が実行されます。
|