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に力を入れたいと思います。