PHP 練習問題1...答え合わせ…(p10)

前回の答えあわせです。

1問目ー 解答例:

<?php                                                                           
    $a = 8;
    $b = 4;
    echo $a + $b."\n";
    echo $a - $b."\n";
    echo $a * $b."\n";
    echo $a / $b."\n";

実行結果:

12
4
32
2

単純な$a変数と$b変数の演算処理です。 これは簡単かと思います。

2問目ー 解答例:

<??php                                                                           
    $testAry = array("リンゴ","ブドウ","ミカン","メロン","バナナ");
    
    foreach($testAry as $val){
        echo $val."\n"; 
        if($val == "ブドウ"){
            echo "おいしい!!"."\n"; 
        }   
    }

実行結果:

リンゴ
ブドウ
おいしい!!
ミカン
メロン
バナナ

ここでは配列とforeachループを使っています。 foreachで要素を受け取るようにして、ifでブドウだったら "おいしい!!"出力ですねw

3問目ー ちょっと、79点以下としていたところが、この判定だと 全部の配列要素でバラバラ通らないので、「点数が50点以外かつ40点以上かつ79点以下」の場合に変えましたwすいませんw 解答例:

<?php
    $testPoints = array(80,90,40,50,20);

    foreach($testPoints as $val){
        if(90 <= $val){
            echo "やったね、高得点!!"."\n"; 
        } else if(80 <= $val){
            echo "おしいもうちょっと!!"."\n"; 
        } else if(50 != $val && 40 <= $val && $val <= 79){                  
            echo "頑張れ!!"."\n"; 
        } else if($val == 50){
            echo "ちょうど半分やぞ!!"."\n"; 
        } else {
            echo "がんばれがんばれできるできる!今日からお前は富士山だ!!"."\n"
        }   
    }  

実行結果:

おしいもうちょっと!!
やったね、高得点!!
頑張れ!!
ちょうど半分やぞ!!
がんばれがんばれできるできる!今日からお前は富士山だ!!

配列をforeachでループさせた中で、if elseをがっつり使っています。 一番上から評価されて、trueになったら、中の処理をして次に行ってしまうので 40点の時の判定が変な感じになってます。というか50じゃなくて40点以上79点以下ですね。

4問目、FizzBuzz出力ですが下記のようになります。

<?php                                                                       
    for($i = 1;$i <= 100;$i++){
        if($i % 3 == 0 && $i % 5 == 0){ 
            echo "FizzBuzz"."\n";
        } else if($i % 3 == 0){ 
            echo "Fizz"."\n"; 
        } else if($i % 5 == 0){ 
            echo "Buzz"."\n"; 
        } else {
            echo $i."\n"; 
        }   
    }   

実行結果:


1
2
Fizz
4
Buzz
Fizz
7
8
Fizz
Buzz
11
Fizz
13
14
FizzBuzz
.
.
略

forで初期値1から100までの間ループして if文であまりが0の場合、でそれぞれやって判定してますね。

どうだったでしょうか?簡単でしたか?? 上達への道は、コピぺしていくんじゃなくて、自分で考えて作るところに あるかと思ってます。

それではまた。

PHP 練習問題1...(p9)

いきなりですが p1〜p8までやってきた内容について、練習問題を出します。

  1. 変数$aと$bを作成し、$aに8を代入。$bに4を代入し、加算・減算・乗算・割算を行い 結果を出力するプログラムを作成してください。 ヒント:演算子は[ + - * / ]を使います。

  2. $testAryにリンゴ、ブドウ、ミカン、メロン、バナナという要素を文字列で入れた配列を作成し ループで回して中身を全て出力してください。 さらにブドウの時は「おいしい!!」という文字列を出してください。

  3. $testPointsに80, 90, 40, 50, 20 という点数(数値)を入れた配列を作成し ループを回して、点数に合わせて下記条件で出力してください。 90点以上・・・「やったね、高得点!!」 80点以上・・・「おしいもうちょっと!!」 79点以下・・・「頑張れ!!」 50点・・・「ちょうど半分やぞ!!!」 それ以外・・・「がんばれがんばれできるできる!今日からお前は富士山だ!!」

4. 最後に難易度上がりますが・・・よく出題されるFizzBuzz出力プログラムです。

1から100までの数をプリントするプログラムを書いてください。3の倍数のときは数の代わりに「Fizz」と、5の倍数のときは「Buzz」と出力し、3と5両方の倍数の場合には「FizzBuzz」と出力するように作成してください。 ヒント:%を使って余りが0だった場合で判定できますね。

とりあえず。これくらいで!! 答えは、また明日!!

PHP 関数(function)について...(P8)

今日は関数についてです。

関数は、処理をブロックでまとめたものになります。

そのブロックに名前を付けて、読んであげると、そこに書いた処理を上からやってくれるという感じです。

下記のコードに適当な名前をつけて保存しましょう。

今回はtestFunction.phpとします。(コマンド:php testFunction.phpで実行)


<?php                                                                                                      
    echo "start function call test"."\n";

    function testFunc1($str){
        echo $str."様、お疲れ様です。"."\n"; 
    }   

    function testFunc2($val1, $val2){
       echo $val1 + $val2."\n";
    }   

    function testFunc3($val1, $val2){
       return $val1 - $val2;
    }   

    testFunc1("ヤスロー");
    testFunc2(8, 3); 
    $res = testFunc3(8, 3); 

    echo $res."\n";

    echo "end function call test"."\n";

実行結果:

start function call test
ヤスロー様、お疲れ様です。
11
5
end function call test

プログラムの最初と最後にstart,endの出力を入れてみました。

上から流れてstart...を出力し、testFunc1,2,3に差し掛かりますが、ここでは定義だけなので、処理は行いません。

関数は[関数名(引数)]で呼び出します。引数のない関数を呼ぶ時は[関数名()]となります。

それで、3つ定義が終わって、関数呼び出しに入っています。

[testFunc1("ヤスロー")]でヤスローという文字列を渡して、testFunc1を呼び出しています。

testFunc1では $strで引数を受け取って、処理を行います。ここでは文字列を出力するだけです。

[testFunc2(8, 3)]で数値の8と3を渡して、testFunc2を呼び出しています。この関数は足した数値を表示させていますね。

最後に、[testFunc3(8, 3)]で数値の8と3を渡して、testFunc3を呼び出しています。この関数は引数1−引数2をした後に、結果を返す。ということをしています。なので[return]が入ってますね!

[return 値]で値を呼び出し元に返せます。あとは$resで受け取って出力といった流れになります。

関数の使い所としては、同じ処理をやる時には、関数にして、複数回呼び出すと楽になります。

また、処理をまとめておきたい時、まとめておいたほうが見やすい時は、積極的に使っていくといいかと思います。

関数公式リファレンス

それでは。また。

PHP switch文について...(P7)

今日はswitch文について、書いてみます。

switchは一つの値に対して、複数条件分岐しないといけない時に便利です。

if - else ifでも書けますが、switch文を使うことにより、より簡潔に書くことができます。

見やすくなるので、いいと思います。積極的に使っていきましょう。

実際にコードを書きます。

下記をtestSwitch.phpで保存して、実行しましょう(コマンド:php testSwitch.php)


<?php
    // if文を使って分岐する
    $num = 0;
    if($num == 0){
        echo "apple"."\n";
    } else if($num == 1){
        echo "grape"."\n";
    } else if($num == 2){
        echo "orange"."\n";
    } else{
        echo "other"."\n";
    }

    // switch文を使って分岐する
    $num2 = 2;
    switch($num2){
        case 0:
            echo "apple"."\n";
            break;
        case 1:
            echo "grape"."\n";
            break;
        case 2:
            echo "orange"."\n";
            break;
        default:
            echo "other"."\n";
            break;
    }

実行結果:

apple
orange

$num,$num2の変数を分岐させて、果物名を出力してるプログラムですw

最初の$numを使っている箇所は、if文で分岐していて

次の$num2の箇所は、switch文で分岐させてみました

switch文の書き方は、「switch(値)」で、丸カッコの中に、値を書いて、

「case 値:」で判定させます。今回はcase 0: case 1:で0の時, 1の時、、

のような感じで作っています。breakはcaseで区切ったところの最後に入れます。

ない場合は、次のケースも処理をしてしまいます。

例えば、$num2 = 0の場合で、grapeの下にbreakがない場合は、

出力が apple grape となります。

breakがない場合は次の処理が判定なく行われてしまうので注意です。

defaultはif文で言うところの、elseで何にも当てはまらなかった場合に

入ってきます。

ifばかりだと、コードがみにくくなるので、積極的に使って行った方がいいかと思います! switch公式 リファレンス

それでは、また。

PHP foreach文(繰り返し)について…(P6)

今日はforeach文についてです。

foreach文は配列を要素分ループします。

配列の中身を全部使い切るループを行うときは便利です。

実際にコードを書きます。下記をtestForeach.phpで保存して、

実行しましょう!!(コマンド:php testForeach.php)

<?php
    // ゲームタイトル配列をforeachでループする
    $gameTitles = array("スーパードンキーコング", "マリオブラザーズ", "MOTHER2");

    foreach($gameTitles as $value){
        echo $value."は面白い!!"."\n";                                                                   
    }   

    // スマホ配列をforeachでループする
    $smartPhons = array("apple" => "iPhone", "samsung" => "galaxy s", "huawei" => "ascend mate 7");

    foreach($smartPhons as $key => $value){
        echo $key."は".$value."を発売!"."\n";
    }   

実行結果:

スーパードンキーコングは面白い!!
マリオブラザーズは面白い!!
MOTHER2は面白い!!
appleはiPhoneを発売!
samsungはgalaxy sを発売!
huaweiはascend mate 7を発売!

最初にゲームタイトル配列($gameTitles)を作成して、foreach分でループしています。

キーのない配列なので、[配列名 as 受取る値の変数名]で、書くことができます。

1ループずつ、$valueの中が配列の値で上書きされ、ループすることになります。

次のスマホ配列はキーと値がセットで定義されている連想配列です。

foreachでループさせる時は、[配列名 as 受取るキー名 => 受取る値の変数名]で、書くことができます。

これで、キーと値を受け取って、ループして処理をします。

次は配列の中に配列を入れるってことをしてみます。

下記をtestForeach2.phpで保存して、

実行しましょう!!(コマンド:php testForeach2.php)

<?php                                                                                                      
    $allSushi = array("軍巻" => array("鉄火巻き","納豆巻き"), 
                   "握り" => array("サーモン","はまち","エビ")
                );  

    foreach($allSushi as $type => $sushiAry){
        echo $type."\n"; 
        foreach($sushiAry as $food){
            echo "  ".$food."\n";
        }   
    } 

実行結果:

軍巻
  鉄火巻き
  納豆巻き
握り
  サーモン
  はまち
  エビ

$allSushiに配列を代入しますが、その配列の中で、「軍巻」をキーに値を配列にしたものと

「握り」をキーに値を配列にしたものを入れています。

この場合に配列の中身を全て表示させたい時、forを2重ループしてもいいですが、

foreachを使うと楽に処理できます。 $typeでキーを受け取って、$sushiAryで配列を受け取ります。

$typeを出力して、$sushiAryは配列なので、それをまたforeachで回すといった感じです。

foreach文 公式リファレンス

それでは、また。

PHP while/for文の繰り返しについて…(P5)

毎日15分くらいでできる、簡単記事を想定して書いています!

今日は繰り返し、ループ文についてです。

while, for文は処理を繰り返すことができます。

配列を使うときや、同じ処理を行うときに使います。

下記のコードをtestWhile.phpで作成しましょう。

<?php
    $cnt = 0;

    while($cnt < 10){
        echo "hello!world!".$cnt."\n"; 
        $cnt++;  
    }   

実行してみます(コマンド:php testWhile.php) 実行結果:

hello!world!0
hello!world!1
hello!world!2
hello!world!3
hello!world!4
hello!world!5
hello!world!6
hello!world!7
hello!world!8
hello!world!9

hello,world 10連続出力ですw

10回ループ処理が行われたのを確認できるかと思います。

「$cnt < 10」の箇所で毎回ループするたびに比較して、

10以上になったら抜けるようになっています。

そのために$cnt変数をwhile分の一番下でインクリメントしています!

ループ処理で怖いのは無限ループになることです。ループを抜けるようにプログラムしないと一生ループしちゃいます。

失敗したときはコンソール画面でctrl+cで処理をキャンセルできます。

つぎはfor文を使います。

配列も混ぜてみますね。

下記のコードをtestFor.phpで作成しましょう。

<?php
    $testArray = array("プレモル","一番搾り","スーパードライ","のどごし生","金麦");

    for($cnt = 0; $cnt < 5; $cnt++){
        echo $testArray[$cnt]."\n"; 
    }   
    echo "プハーッ"."\n";

爽快な感じにしあがりましたww

実行してみます(コマンド:php testFor.php) 実行結果:

プレモル
一番搾り
スーパードライ
のどごし生
金麦
プハーッ

前回やった配列を使っています。要素は5つです。

for文の場合は、1行でループする回数を制御することができます。

「for(初期値; 比較処理; 次の値)」 のような感じで、それぞれセットしておけば、

ループするたびに値を1ずつカウントアップしてくれます。

今回のコードで言うと$cntを0で初期化して、5までの間、$cntをループ毎に1プラスするという

言い回しができますね。

while文 リファレンスへ for文 リファレンスへ

いろいろやって、挙動を確かめてみてくださいね。無限ループには気をつけて!

明日はforeach文でも。。

それでは、また。

PHP条件分岐(if - else)と比較演算子について...(P4)

今日は条件分岐についてです。

プログラムの中で、

処理する内容を条件によって分岐することができます。

条件分岐のときに値を比較する記号が比較演算子です。

下記をtestIf.phpで保存してください。

<?php
    $points1 = 10;
    $points2 = 6;
    
    if($points1 < 20){
        echo "ポイント1が20点以下(-_-;)"."\n";
    } else {
        echo "ポイント1が20点以上!!(^0^)/"."\n"; 
    }

    if(10 < $points2){
        echo "ポイント2が10点以上"."\n";
    } else if(6 == $points2){
        echo "ポイント2が6点"."\n";
    } else if(5 == $points2){
        echo "ポイント2が5点"."\n";
    } else if(4 == $points2){
        echo "ポイント2が4点"."\n";
    } else{                                                                     
        echo "ポイント2がそれ以外"."\n";
    }

phpコマンドで実行してください。(php testIf.php)

実行結果は下記のようになります。

実行結果:

ポイント1が20点以下(-_-;)
ポイント2が6点

ポイント1は10を代入しているので「$points1 < 20」が成立して

その間を通って、20点以下という結果がでます。

ポイント2は6を代入しているので「6 == $point2」が成立します。

評価の順はプログラムは上から下へ基本的には流れるので

上からif, else if, elseとなります。else ifやelseは省略して問題ないです。

if(もしも〜だったら)で、比較して、else if(それ以外でもしも〜だったら)、else(それ以外で)という感じですね。

比較演算子は、この[if($points1 < 20)] の [ < ] を指します。 基本的に使うものとしては $a == $b -> 等しい $a != $b、$a <> $b -> 等しくない $a < $b -> より少ない $a > $b -> より多い $a <= $b -> より少ないか同じ(以下) $a >= $b -> より少ないか同じ(以上) があります。

使っていない演算子を使用して、もう一個かいてみました。

<?php
    $helloStr = "こんにちは";

    if($helloStr == "こんにちは"){
        echo "どもー"."\n"; 
    } else if($helloStr == "こんばんは"){
        echo "ばんわー"."\n"; 
    }   
        
    if($helloStr != "おはよう"){
        echo "おはようとこんにちはは同じではない"."\n"; 
    } else {
        echo "おはようとこんにちはは同じ"."\n"; 
    }             

実行結果は下記のようになります。 実行結果:

どもー
おはようとこんにちはは同じではない

文字列も比較できて、最初で同じになるので「どもー」を出力して、次は「おはよう」と比べて同じではない場合に

TRUEになって「おはようとこんにちはは同じではない」が出力されています。

testIF.php,testIF2.phpのどちらも、入力値を変えたりして、

動きを見てみてくださいねー

if 公式リファレンス 比較演算子 公式リファレンス

ではまた。