PHP,DB,HTML
本日の授業
■PHP
□確認テスト
■DB
□集合関数を使う
□ある条件でレコードを絞り込む
■HTML
□テキストスタイル
□テキストの周囲をデザイン
■PHP
今日、PHPのテストでつまずいた問題が、
問『多次元配列を使い、学生10人分の中の教科(英語、数学、国語)ごとの最高得点を出力するプログラムを書きなさい。』
解答一例がこちら、
<?php $student = array(); $student[] = array("eng"=>90,"math"=>75,"ja"=>100); $student[] = array("eng"=>68,"math"=>50,"ja"=>25); $student[] = array("eng"=>46,"math"=>57,"ja"=>89); $student[] = array("eng"=>35,"math"=>60,"ja"=>80); $student[] = array("eng"=>16,"math"=>55,"ja"=>85); $student[] = array("eng"=>98,"math"=>68,"ja"=>25); $student[] = array("eng"=>79,"math"=>95,"ja"=>64); $student[] = array("eng"=>75,"math"=>64,"ja"=>53); $student[] = array("eng"=>89,"math"=>88,"ja"=>75); $student[] = array("eng"=>100,"math"=>66,"ja"=>44); $max = 0; $max_1 = 0; $max_2 = 0; foreach($student as $name => $subject){ foreach($subject as $testname => $point){ if($testname == "eng"){ if($max < $point){ $max = $point; } }elseif($testname == "math"){ if($max_1 < $point){ $max_1 = $point; } }elseif($testname == "ja"){ if($max_2 < $point){ $max_2 = $point; } } } } echo $max." ".$max_1." ".$max_2."\n"; ?>
と、こんな感じになります。
やっていることを簡単に言えば、外のfor文で生徒10人をまわす、中のfor文でその生徒の教科を3つをまわす。
その中のfor文で、各教科の最大値をmaxという変数にいれておいて、それを10人繰り返せばよい、といった感じです。
私は、foreachが嫌い(というかforの方が考えやすい)なので、for文を使ってこの問題を解きました。
<?php $sut=array(); $sut[]=array('英語' =>10,'数学' =>12, '国語' =>20); $sut[]=array('英語' =>20,'数学' =>80, '国語' =>40); $sut[]=array('英語' =>30,'数学' =>80, '国語' =>60); $sut[]=array('英語' =>40,'数学' =>70, '国語' =>80); $sut[]=array('英語' =>50,'数学' =>60, '国語' =>10); $sut[]=array('英語' =>60,'数学' =>50, '国語' =>12); $sut[]=array('英語' =>70,'数学' =>40, '国語' =>14); $sut[]=array('英語' =>80,'数学' =>30, '国語' =>16); $sut[]=array('英語' =>90,'数学' =>20, '国語' =>18); $sut[]=array('英語' =>10,'数学' =>10, '国語' =>20); $maxe=0; $maxs=0; $maxk=0; for($i=0;$i<9;$i++){ if($sut[$i]['英語']<$sut[$i+1]['英語']){ $maxe=$sut[$i+1]['英語']; } if($sut[$i]['数学']<$sut[$i+1]['数学']){ $maxs=$sut[$i+1]['数学']; } if($sut[$i]['国語']<$sut[$i+1]['国語']){ $maxk=$sut[$i+1]['国語']; } } echo "英語最高点".$maxe."\n"; echo "数学最高点".$maxs."\n"; echo "国語最高点".$maxk."\n"; ?>
for文が自分の中で使いやすくても、foreachは後々役立ってくるらしいので、嫌がらずforeachにも慣れたいと思います。
■DB
□集合関数を使う
SELECT
関数名(列名または演算式)AS 別名
FROM
テーブル名
関数
•個数(COUNT)
•平均(AVG)
•総和(SUM)
•最大(MAX)
•最小(MIN)
□ある条件でレコードを絞り込む
SELECT
選択リスト
FROM
テーブル名
WHERE
条件
■HTML
今日は、テキストを変えたり、テキストの周囲をデザインしたりしました。
色々とCSSをいじれるようになってきましたが、いまいち自分の意図したようにデザインを変えられず、楽しむことが出来ませんでした。
いまいち構造とか、使い方とかがまだはっきりとわかってないのが原因だと思います。授業で実際に試しているときは、動作を確認することもできるし、出来てる気がしてしまいますが、自分はHTMLあんまわかってないって今日感じてしまいました。
HTMLは自分でもう一度復習をしなければいけないと強く思う。
今週も、全教科気合い入れてやりますが、特にHTMLに力を入れたいと思います。