カテゴリー : 2013年 8月

IF

IFは条件分岐です。 もし~~なら++をする。 という分岐処理を行っていきます。

if(条件式) 処理 ;

これが、一番シンプルなIF文です。{}や : ~ endif;がないとお思いでしょうが、ifの次にくる処理が一文のみの場合はこれでOKなのです。処理の行頭に条件分岐をつけているだけです。なのでIF文と呼ばれるのです。ためしに下記コードをやってみましょう。

IF文は真ん中の一行だけですよ!!

ただ、条件分岐での処理は複数の行で構成されることが多いので、

 if(条件式)
{ 処理 ;}
または
if(条件式):
処理 endif;

とされます。

となるわけですね。

上の例だと、条件式にあった場合は処理をそうでなければなにもしない。ということになりますが、そうでなかった場合の処理もおこないたい場合は、elseを使います。

 
if(条件式){ 
 trueの処理 ;
}else{
false の処理
}
または
if(条件式):
trueの処理 
else:
falseの処理
endif;

先ほどのサンプルコードにelse処理を付け加えます。

このようになります。またelseの時に条件式をつけることもできます。

 
if(条件式){ 
 trueの処理 ;
}elseif(条件式){
最初の条件がfalseであり、かつ次の条件がtrueのときの処理
}else{
全てfalseの処理
}
または
if(条件式):
trueの処理 
elseif:
最初の条件がfalseであり、かつ次の条件がtrueのときの処理
else:
全てfalseの処理
endif;

たとえば、

また、三項演算子といわれるもので、if~elseの処理を行うこともあります。

 
条件式 ? trueの処理 : falseの処理; 

サンプルコード

処理の値を即代入できる利点があります。

IF文練習問題

  • その1
    • $numに任意の数字を代入して、偶数なら丁 奇数なら半とだすプログラムを作成しましょう。
    • rand関数 rand() を使用して $numの値をランダムに生成して、丁半を判定するようにしましょう。 $numの値を表示させるのも忘れずに。
  • その2
    • 20未満なら未成年、20以上なら成人、77なら喜寿 88なら米寿 と表示されるような年齢判定プログラムを作成しましょう。
    • 配列変数 $ageを用意して、配列の値をarray(8,17,19,20,21,76,77,80,81,89,88)とし、$ageの添え字をrand関数で生成し、値をとりだし 年齢判定プログラムに判定させてください。

 

if文その2

if文は入れ子にすることもできます。

ループ文と合わせる事ももちろんできます。

IFで条件判定をしてtrueの時にループ処理。
ループ処理をしている中で、IFでの条件判定。
などなど

論理演算子

演算子 名前 結果
and 論理積 $a and $b $aと$bが共にTRUEのときはTRUE
or 論理和 $a or $b $aまたは$bのどちらかがTRUEのときはTRUE
xor 排他的論理和 $a xor$b 両方の結果が異なればTRUE(どちらかがTRUEでどちらかがFALSE)
! 否定 !$a $aがTRUEでないときはTRUE
&& 論理積 $a && $b $aと$bが共にTRUEのときはTRUE
|| 論理和 $a || $b $aまたは$bのどちらかがTRUEのときはTRUE

例1

例2

* gettype()関数は変数のデータ型を調べられます。

例3

演算子には優先順位があります → PHPマニュアル

例3の場合、論理和(||)と論理積(&&)をそれぞれ評価した後に論理積での評価をしたいので、それぞにれ括弧をつけています。

IF練習問題2

問題1

  • $yearという変数をつくり 西暦を代入してください (例 $year = 2013)
  • 閏年を判定するプログラムを作成してください。
    • うるう年は、4年に1回ありますが、100で割り切れる年はうるう年ではありません。また400で割り切れる年はうるう年になります。

問題2

  • 現在時刻にあわせてやる気のでるメッセージを出力(例:もうすぐランチ!がんばれ!)。
    • xamppのタイムゾーンを日本にあわせる
      • C:\xampp\php\php.ini の中のdate.timezone を探して、値を date.timezone = Asia/Tokyo に変更してからapach再起動してください。
    • 時刻を取得する関数は date(” H:i:s”)関数

 

if練習問題 パンくずリストをつくろう!

見本→

パンくずリストを作りましょう!!

  • 以前制作したnuv_list.phpから配列部分を抜き出して、nuv_array.phpを作っておくと、URLのパスが複数箇所で使用できるので便利です。
  • breadcrumb.phpを作成してheader.phpに読み込ませておくとファイルの可読性や保守性に有利です。
  • インクルードさせるには、複数回使用しますし、インクルード元で処理がエラー起きたときに処理をとめてほしいので、requireを使うとよいでしょう。
  • 現在アクセスしているURLを取得するには$_SERVER["REQUEST_URI"]を使うと取得できます。

 

要件

  • 現在閲覧しているページに対してはパンくずのリンクを生成しない。
  • TOPページからスタートする階層表現とする。(フォルダ内の階層はindedxもfirstもsecondも並列でかまいません)

break

breakは、現在実行中の for, foreach, while, do-while, switch 構造の実行を終了します。

制御練習問題

問題1 => 以下をphpで作成してください。
ヒント:連想配列
foreach文 foreach(配列 as $key => $value){ 繰り返し処理 }

イチゴ:300円
バナナ:100円
オレンジ:200円
マンゴー:500円

問題 2 => 1から50までの数字を表示させてください。
 ただし、3の倍数のみ「aho」と表示させてください。

1 2 aho 4 5 aho 7 8 aho 10 11 aho 13 14 aho 16 17 aho・・・
こんな感じで!

PHPマニュアルの関数リファレンスの読み方

PHPにはいろんな関数があります。それを調べるのに便利なPHPマニュアルというものが存在します。

ここには、PHPの関数の使い方説明が書いてあります。

たとえば

explode

という関数を調べた場合 →リンク

 

array explode ( string $delimiter , string $string [, int $limit ] )
文字列の配列を返します。この配列の各要素は、 string を文字列 delimiter で区切った部分文字列となります。

と書かれています。

この読み方を理解すると、関数リファレンスを読むことが楽になりますよ。

たとえば、上の例だと

  • array === 配列の戻り値を返します。
  • explode === 関数の名前
  • string $delimiter === 第一引数はデリミタを渡してください。
  • string $string  === 第2引数は、文字列を渡してください。
  •  [, int $limit] === 大カッコで囲われている物は、オプションです。今の場合は整数の数字を渡してください。

というように、関数の戻り値のデータ型と引数のデータ型などが記載されています。

こことかここを参考にわかる関数でもPHPマニュアルを見て読み方を理解してください。

関数練習問題(文字列関数)

下記の問題を解いてください。

  1. 有限会社タイテック・4Standard・C_room 左記の文字列から有限会社タイテックと4StandardとC_roomをそれぞれ別の変数に格納してください。 →ヒント mb_substr()
  2. 有限会社タイテック・4Standard・C_room 左記の文字列からC_roomをA_roomに置換してください。 → ヒント str_replace()
    1. できる方は、オプションの引数&cntを渡して、何個置換したかを表示してください。
  3. http://127.0.0.1/php_p/second.php 左記のURLの文字列を / を区切り文字として、配列型の変数に格納してください。→ ヒント explode()
    1. できる方はArray ( [0] => http: [1] => [2] => 127.0.0.1 [3] => php_p/second.php ) このような実行結果になるようにしてください。
  4. 2013  , 8 ,5という3つの文字列をそれぞれ変数に格納した後、2013年08月05日という文字列に整形してください。→ヒント printf()
  5. さっぽろしシロイシクキタゴウ3ジョウ5チョウメ という文字列があります。 全て半角カナになるように変換してください →ヒント mb_convert_kana()
  6. 問題5で回答した文字列をEUC_JPに変換してください→ ヒント mb_convert_encoding() これの実行結果の確認は、ブラウザのエンコーディング設定を変更してください。
  7. $year = 2013  $month = 8; $day = 5; の3つの変数と IF文判定用の配列型変数 $lang=arrey(en,ja); $kana(zenkaku,hankaku); があります 以下の問題はこれを利用します。
    •  $lang[0]、$kana[0]の場合は
      • AUG 05 2013 と全角表示
    •   $lang[1]、$kana[0]の場合は
      • 2013年 5月 13日 と全角表示
    •  $lang[0]、$kana[1]の場合は
      • AUG 05 2013 と半角表示
    • $lang[1]、$kana[1]の場合は
      • 2013年 5月 13日 と半角表示
    • となるようなプログラムを作成してください →printf() , mb_convert_kana(), 他にも使ええる関数あるかもしれませんので、工夫してください。