ichikawaです。PHPについてブログを書くのは第1回目の授業以来です。
今日は配列について学びました。
今まで変数をよく使ってきましたが、それらを一つにまとめることができるとても便利な機能です。
配列を使うと使わないとで操作が随分楽になり、見た目もすっきりしました。
授業でやった、学生の点数をそれぞれ出力させる例題です。
まずは配列のコードを使わない例です。
<?php
$student1 = 50;
$student2 = 20;
$student3 = 35;
$student4 = 70;
echo $student1.”\n”;
echo $student2.”\n”;
echo $student3.”\n”;
echo $student4.”\n”;
?>
次に、今日習った配列と、foreach文を使ったものです。
foreach文は、この場合だと as の直後にある$scoreに$studentの値を代入し、$studentの配列の要素の分だけループさせます。{ }内にはfor文と同じく、ループ中の実行内容を入力します。
<?php
$student = array (50,20,30,70);
foreach($student as $score){
echo $score.”\n”;
}
?>
(出力結果です。上と同じ)
50
20
35
70
二つを比較してみると、
見やすさは前者の方が見やすいかもしれません。
しかし、これは後者のほうが複雑になっているように見えるだけです。
配列を使わないと変数を一つ一つ出力させなければならないので、とても手間です。
対して配列を使うとforeach文の組み合わせで、ループさせながら変数の番号だけを変えていくことができるので、$studentを出力する流れはこちらのほうがとても効率的です。
この例題では変数の$studentに番号を加えているだけですが、ここでもし変数$ichikawaなどを入れて多数出力していくと、変数のミスタイプなど間違う可能性も高くなります。
さらに$student(学生)と$ichikawa(特定の個人)の点数を比較して出力させる場合、配列を使わないひとつひとつ出力させるやり方では、$studentと$ichikawaが同じ階層に見えてしまうこともあります。
それを防ぐ為にも、 配列を使って同じ種類の変数をまとめ、処理、出力させていくことが大切です。
最後に配列の二次元構造を学びました。
これは配列の中にさらにもう一つ配列をつくるものです。
例えば
$student ["クラスA"]["市川"] =50;
$student ["クラスA"]["室井"] =65;
$student ["クラスB"]["入沢"] =40;
$student ["クラスB"]["平藤"] =80;
とすると、ichikawaは$studentのclassAに属している、といったニュアンスになり、その構造も見やすいです。
同じclassAにはmuroiも存在しているため、別々に出力すると時間がかかりますが、クラスAでまとめると処理が早くなります。
これをforeach文を使い出力すると、
<?php
$student ["クラスA"] ["市川"] = 50;
$student ["クラスA"] ["室井"] = 65;
$student ["クラスB"] ["入沢"] = 40;
$student ["クラスB"] ["平藤"] = 80;
foreach ($student as $class => $array){
foreach ($array as $name => $score){
echo $class.”\t”.$name.”\t”.$score.”\n”;
}
}
?>
(出力結果)
クラスA 市川 50
クラスA 室井 65
クラスB 入沢 40
クラスB 平藤 80
となります。 この場合のforeach文中の as 直後の変数はキー変数と呼ばれるもので、配列のキーの部分を取得するために使います。配列要素は => の後の変数に代入していきます。
本日教えていただいたのはここまでです。
この例題ではただ変数の値を表示しただけですので配列の利便性があまり評価されませんが、後者の 例題でクラスAだけ、クラスBだけで平均の値を出したいような場合では配列を使用しないととても苦しくなります。
クラスが20,30と増えようものならなおさらです。
foreach文の使い方がまだぎこちないですが、配列を使いこなせることが良いPHPテキストを作ることに繋がると思います。
以上今日の授業内容でした。
最初は簡単だったPHPが、いまではなかなか理解できません。
しかし、たくさんのコードを覚えることで、より複雑な問題も解けるようになり、楽しみが増えました。
—-
(2008/04/22 19:14 muroi追記)
お待たせしました! 動画アップしました!
(part1)
(part2)

コメントをどうぞ