ギークなお姉さんは好きですか

恋焦がれる理想の男性・ギークを知るため、プログラミングがわかるお姉さんを目指すブログ

8日目 目指せ!ループマスターへの道!

日記

うわあああぁぁぁぁぁあああ!!!!
ナイスーなギークにゴイスーなツールもらった!!!!!!!


ギークなお姉さんのPHPソースコンバーター

ギークなお姉さんのPHPソースコンバーターは、
ギークなお姉さんが自分で書いたPHPのソースをアップロードすると、
そのソースをdtiブログに投稿しやすいようにタグを書き換えたり、
行番号を付け足してくれる、ただそれだけのツールです。

by ギークな(?)バスケットマン tetsunosuke


ちょ!!それだけって!!!それ以上なにを求めるというの!!!???
欲しがりません勝つまでは!!!!!

かみさま。私になにができますか。
どうすれば tetsunosuke さんは喜んでくれますか。
私は tetsunosuke さんを幸せにしたい。する!してみせる!!

そうだ。ギークになろう。
今のところ、それ以外の誠意の示し方を知らない。
とゆことで。よーし、べに特盛で頑張っちゃうぞー!
ここは本当におめでてーいんたーねっとですにょ^^^^^^



繰り返し構文を学ぼう

ヘッダ情報の取得の時に覚えた繰り返し構文。
前回は foreach という関数を使ったけど、繰り返し構文は他にもある。


PHPには、foreach命令のほかにも、繰り返しループを実現するための構文として、
for、while、do...whileという3つの構文が用意されています。
foreach命令が配列の要素数に基づいてループの終了を判定するのに対して、
for命令はあらかじめ指定された繰り返し回数で、while、do...while命令は
条件式の真偽(TRUE/FALSE)によってループの終了を判定します。

参考:10日でおぼえるPHP5 入門教室



foreach は前回やったので省略。
今回は for、while、do...while の3つに迫る。
この ”迫る”って表現はドキュメンタリーぽくてカコイイので、これからちょくちょく使おうと思う。
ではさっそく迫ろう。
これは上で挙げた参考書の説明が分かりやすかったので、以下それを引用する。


【for命令】
for(初期化式;終了条件;増分式){...ループ内で処理する処理...}

1回目のループで初期化式を実行し、変数を初期化します。
その後、ループを1回実行するごとに増分式が実行され、終了条件がFALSEになった
タイミングで処理を終了します。



【while命令】
while(条件式){ループ内で処理する処理...}

条件式がTRUEの間のみループを繰り返します(前置判断)。



【do...while命令】
do{...ループ内で処理する処理...}while(条件式);

条件式がTRUEの間のみループを繰り返します(後置判断)。




はぁ。Lovecall The Typing Girl って感じだった。参考書コピペ乙。
一応説明したけど、日本語よりソースコードの方が分かりやすいよね♪(←ギーク発言!!
ってことで、実際に書いて動かしてみる。
ヘッダ情報の取得の foreach 部分だけ書き換える。
まずは該当部分のソースを貼る。
※タグの最初は全角にしてあります。


8 foreach($aryHeader as $name){
9 
10  :(PHP終了タグとhtml部分中略)
11   
12 <?php print($name); ?></th>
13   <td><?php print($_SERVER[$name]); ?></td>
14  
15 :(html部分とPHP開始タグ中略)
16 }

サンプル:list_header.php


うん。
foreach は変数 $aryHeader に入ってるデータを順番に $name に代入して、
入れるデータがなくなったら繰り返し終了の構文。大丈夫、覚えてる。
参考:7日目 ヘッダ情報が見たい!知りたい!晒したい!

これをまず、for で書き換えてみよう。


8 for($i=0;$i<count($aryHeader);$i++){
9 
10  :(PHP終了タグとhtml部分中略
11   
12 <?php print($aryHeader[$i]); ?></th>
13   <td><?php print($_SERVER[$aryHeader[$i]]); ?></td>
14  
15 :(html部分とPHP開始タグ中略)
16 }



8行目。
(カッコ)内は初期化式;終了条件;増分式の順で並んでる、と前述の説明にあった。
最初に $i に 0 を代入して初期化。
次の count は初めてだ。


count命令は、指定された配列に含まれる要素の数(ここでは3)を返します。



OK。
参考書によると ”終了条件が FALSE になったタイミングで処理を終了” とのこと。
つまり、$i が 3 より小さい、という条件が成り立たなくなったら処理を終了しろってことね。
最後の $i++ は、$i に 1 を加算して代入するという意味。
参考:6日目 クッキー受け取ってください!
よし。問題ない。全く問題ない。



12行目。
$aryHeader[$i]Print しろ、と言ってる。
8行目の for 以下で指示した通り、最初は $i に 0 が入ってる。
で、++ 効果で2回目は1、3回目は2が入る。
それ以降は $i<count が成り立たなくなるのでココで終了。
よし。ちっとも不思議じゃない。予想通りだ。


13行目。
$_SERVER[$aryHeader[$i]]Print しろ、と言ってる。
[カッコ]が二重になっててイラっとするけど、怒ってはいけない。
これは確か、内側から評価するんだった。
$aryHeader[$i] については上で書いた通り。
ってことは、それを $_SERVER で取得すればいいだけ。
なんだ、分かるじゃん。
12行目と連動してるので、コレも3回目で終了。
やってみよう。
完全に問題ない。
サンプル:header_for.php



今度は while で書き換える。


8 $i=0;
9 while($i<count($aryHeader)){
10  
11  :(PHP終了タグとhtml部分中略)
12 
13 <?php print($aryHeader[$i]); ?></th>
14  <td><?php print($_SERVER[$aryHeader[$i]]); ?></td> 
15 
16 :(html部分とPHP開始タグ中略)
17 $i++;
18 }



while は(カッコ)内が成り立つ限り繰り返す。
つまり、$i が 3 より小さいうちはずっと処理する。
処理する内容は 以下の通り。
(しつこくGIGAZINE風)


13,14行目は for の時と一緒なので省略。
で、17行目で $i++ してる。
これも ++ されて $i が 3 以下じゃなくなったら終了。
パーペキに無問題だ。
サンプル:header_while.php



最後は do...while


8 $i=0;
9 do{
10  
11  :(PHP終了タグとhtml部分中略)
12 
13 <?php print($aryHeader[$i]); ?></th>
14  <td><?php print($_SERVER[$aryHeader[$i]]); ?></td> 
15 
16 :(html部分とPHP開始タグ中略)
17 $i++;
18 }while($i<count($aryHeader));



ふむ。
さっきとちょっと違う。
9行目。
まず「しろ!」と言ってる。
何を?13〜17行目までの処理を。
上と一緒ね。
んで、18行目で「もしアレだったら繰り返してね^^」と言ってる。
アレの内容を具体的に言うと、$i が 3 以下なら、ってこと。


while が最初に 「$i が 3 以下なら繰り返せ」って言うのに対して、
do...while は後出しだ。
つべこべ言わずに、とりあえず1回は処理させる。
処理させたあとで「条件が許す限りリピートしてね☆」と言ってくる。
商売上手だな!どうだろう。
そういう問題だろうか。



おっけい♪
繰り返し構文はマスターした。
忘れないように do{復習}while(ギークになるまで); な感じでがむばろーっと!