2010年12月17日金曜日

12/17覚書

☆発展問題 forの中にforを入れる。入れ子

for($i = 0; $i <= 10; $i++){
    for($a = 10; $a < 100000; $a*=2){
        print "i = ".$i. " /";
        print "a = ".$a;   
        print "<br>";
    }
}
akatukiさんから教えてもらいました!

赤い字の箇所が入れ子(と見やすくするための箇所)です。
$a = 10スタートで最大100000まで$a*=2で×2の掛け算して! って命令。
引き算なら$a=--だけど、赤太字を変えなきゃいけないのです。
割り算も$a/=2だけど…。 実際に書いてみてくだしあ。
うっとりするほど苦手な数学です。
そんなわたしでもPHPやりたいんですー! 覚えたいんです!!
この部分については、ここのサイトが非常にわかりやすいです。

☆2500まできたらcool!と入れて改行~テストと入れ子の例その1
iからaのループ処理をして改行したいから、
最初の『{』のすぐあとでprint"<br>\n"で改行。

$data = array(1,2,3,4,5,6,7,8,9,10);
$bee = array(1,2,3,4,5);
$c = 2500;
for($i = 0; $i <= 10; $i++){
    for($a = 10000; $a > 100; $a/=2){
            print "i = ".$i. "&nbsp/";
            print "a = ".$a ;
        if($a == $c){
            print "&nbsp cool!\n";

        }
            print "<br>\n";
    }
}

☆break 例は5回目で愛してるの命令ストップ!
そして入れ子の例その2
breakはよく使うようです。
for($i=0; $i<10; $i++){

     print $i ;
     print"愛してる!";
     print"<br>";
    
     if($i==5){
         break;
     }
}

☆連想配列
連想配列とは?…配列(部屋)に名前をつける
→普通の配列は部屋番号(0~)が自動的に割り振られる
→連想配列は、部屋に文字列をつけられる
ただの配列だと[]には何も入れなかったが・・・

$profile["namae"] = "くわやまひろたつ";
$profile["sei"] = "男";
$profile["toshi"] = 37;
$profile["syumi"] = "旅行";

print $profile["namae"] ;
print "<br>";
print $profile["sei"];
print "<br>";
print $profile["toshi"];
print "<br>";
print $profile["syumi"];

arrayを使うと、,のほかに=>を必ず使う。

$profile = array( "namae" => "くわやまひろたつ" , "sei" => "男" , "toshi" => 37 , "syumi" => "旅行" );

print $profile["namae"] ;
print "<br>";
print $profile["sei"];
print "<br>";
print $profile["toshi"];
print "<br>";
print $profile["syumi"];

☆練習問題 トマトとにんじんとキャベツで。
' tomato'の部分はキーとかバリューと呼ばれる。

$yasai = array(' tomato' => ' トマト',    ' carrot' => ' にんじん',' cabbage' => ' キャベツ',);
    $yasai["tomato"] = "トマト";
    $yasai["carrot"] = "にんじん";
    $yasai["cabbage"] = "キャベツ";
    print $yasai["tomato"];
    print "<br>\n";
    print $yasai["carrot"];
    print "<br>\n";
    print $yasai["cabbage"];
    print "<br>\n";

☆forのように連想配列を全部表示させるforeach
foreachについて
「配列に入っている部屋(key)と値(value)を、最初から最後まで全て取り出す」
for/whileは何に達成するまで何回ループさせるか
foreachはkey分だけループさせる。

foreach($変数名 as $key => $value){ 赤字は固定。$keyと$valueは変数だから変更可能だけど、
一般的にそのまま使うことが多い。(サイト管理は複数でやるし。独自変数多用は混乱の元。)
print "{$key}~も出せるけど別に出さなくてもよい。これができるよということ。

$profile = array( "namae" => "くわやま" , "sei" => "男" , "toshi" => 37 , "syumi" => "旅行" );

foreach($profile as $key => $value){
    print "{$key}は{$value}です<br>";

☆関数
■関数の作り方
・関数の宣言は「function」(変数宣言の「$」と同じ考え方)で始める
・関数名は任意(変数と同じ考え方)
・関数には引数(素材)が必要
・引数(素材)はいろんなものが与えられる可能性があるので変数にする
・与えられた引数(素材)を元に、出来上がったものを「return」する(返す)

function 関数名 (引数=変数){
    return 「引数を加工したもの」
}

こんな感じ
function mixer($sozai){
    return $sozai."ジュースができました!";
}
print mixer("りんごっぽい");
print "<br>\n";

function mixer2($sozai){
    return "とてもおいしい".$sozai. "ジュースができました!";
}
print mixer2("りんごっぽい");
print "<br>\n";
print mixer2("厨二?");
print "<br>\n";
print mixer2("ゆっくり");

※あまりやらないが、変数の前に「&」マークをつけると、「値」という指定になる。
キーもすべて使う目的が多いため、そんなにやらない。

$profile = array( "namae" => "くわやま" , "sei" => "男" , "toshi" => 37 , "syumi" => "旅行" );

foreach($profile as &$value){
    print "{$value}です<br>\n";


☆引数の複数
・引数は何個設定してもよい
・関数は同じプログラム内で引数を変えて何度も使うことができる
→何度も使う処理を関数にすればおk。ていうか関数の目的。

function mixer($sozai1,$sozai2){
    return $sozai1."と".$sozai2."のミックスジュースができました!<br>オイシィ~!<br>";
}

print mixer("りんご","バナナ");
print mixer("いちご","ミルク");

print mixer("いちのへ","くわやま");

※最後はコトリザバス様大喜びw

☆練習問題 引き算

function syouhizei($a,$b){
    return $a-$b;
}
print syouhizei(10000,500);
print "<br>\n";

その2 文字列込み引き算
文字列を入れるときはprintで入れたほうがスムーズだが、
文字列を入れて計算したいときは()でくくる。

function syouhizei($a,$b,$c){
    return "結果=".($a - $b - $c)."です。";
}
print syouhizei(10000,14,2);
print "<br>\n";

☆内蔵関数
パッケージ化されたソース。
string date ( string $format [, int $timestamp ] )
※()の部分は省略可能の意味。
stringがreturnの意。dateがパッケージ化されたソース。
サイトにありがちな時計表示のいくつか。おいはjava scliptでやってたなぁ。
print date("Y/m/d");
print "<br>";
print date("y/m/d");
print "<br>";
print date("H:i:s");

※printって関数だったそうな。
print ("こんにちは");って書かなくても出てくるから省略なんだって。

☆if+条件分岐
&&は「且つ」の意。

function korekatte($kakaku){
    if( $kakaku <= 10000 ){
        return "うん、買ってあげるよ!<br>" ;
    }
    elseif( $kakaku > 10000 && $kakaku <= 50000 ){
        return "う、うん、買ってあげるね、今度…<br>" ;
    }
    elseif( $kakaku > 50000 && $kakaku <= 100000 ){
        return "もう少し安いのにしようよ…<br>" ;
    }
    elseif( $kakaku > 100000 ){
        return "もうキミとは付き合ってられないよ!<br>" ;
    }
}

print korekatte(9000);
print korekatte(30000);
print korekatte(66000);
print korekatte(500000);

☆練習問題 BMI体重。22に近いほどいいそうな。
指数の求め方
体重(kg) ÷( 身長(m)× 身長(m) )

作り方
・関数名は「bmi」
・引数は身長($shincyou)と体重($taijyuu)の2つ
→引数を入力する際の単位は、身長がcm、体重がkgとする
・戻り値がBMI指数
・身長(m)× 身長(m)の部分は、身長(m)の2乗で考える
→ベキ乗を求める内部関数「pow」を使用する

次はおまけ(後回しでよい)
・小数点以下は第一位までを表示させる

function bmi($shincyou,$taijyuu){
    return round($taijyuu / pow($shincyou/100,2));
    }
    print bmi(152,43.3)

powをroundで入れ込む。のがミソでしたあああああああ><
練習問題変えてやてみます……。