PHP復習3

前回の続き。PHP入門編3

 

■データの読み込み

プログラムに外部からのデータを読み込む際のあれこれが下記。

 

・webページ

インターネット経由でamazonから商品を読み込みランダムでおすすめを表示する、ツイッターで特定のつぶやきを取得する、等。

 

・データベース

データベースシステムよりSNSの会員情報を取得したり、

 

ファイルシステム

通常のPCのように、txtやjpgなど、ファイルとして保存されたデータを読み込む。

 

・標準入力

ファイルシステムの一種。下記で説明。
 
 
■標準入力
 
・fgets(STDIN)
標準入力されたデータをプログラムの方で取得するのにtgetsという関数を使う。
 
 
例1
 
入力値
hello paiza
 
<?php
$input = fgets(STDIN);
echo "標準入力値:".$input;
?>
 
このような場合、出力値は下記になる。
 
標準入力値:hello paiza
 
 
・入力値が2行以上の場合
fgets(STDIN)は1行ずつしか値を読み込まない。例えば入力を下記のように2行にした場合。
 
入力値
5
4
 
これを例1のプログラムで出力すると、「標準入力値: 5」としか出力しない。
2行目を読み込みたい場合が例2。
 
例2
 
<?php
$input = trim(fgets(STDIN));
$input2 = trim(fgets(STDIN));
echo "標準入力値:".$input."\n";
echo "標準入力値2:".$input2."\n";
echo $input+$ainput2;
?>
 
このように書く。複数行の場合は、それぞれ\nを入れることで、連続して表示されてしまうことを防げる。
また、入力値自体に改行コードが含まれているので、そのままだと改行が2回入ってしまう。このような場合は、出力側の改行を取るのではなく、変数側の改行を取るようにする。何故なら、変数は様々な場合で使う場合が多いので、意図しない改行が入っていると後々バグに繋がってしまう。よって、値を出力するときに取り除く。
 
・trim
この関数で、文字列の前後に入ってる半角スペースや、改行コードを取り除くことができる。

 

■while文によるループ処理
 
・while文の基本式
 
<?php
while(ループを続ける条件式){
    //繰り返し実行する処理
}
?>
 
もし()の条件式が成り立つ場合は//の処理を実行し、繰り返す。もし1~10を出力したい場合は例3になる。
 
例3
 
<?php
$i = 1;
while($i <= 10){
    echo $i;
    $i++;
}
?>
 
この際、$i++を書かないと、永遠にループ処理が続く。このようにループから抜け出さないプログラムを実行すると、cpuを占有してしまうので注意。
また、$Iのようにループの数を数える変数のことをカウンタと言う。カウンタの変数はなんでもいいが、$iや$jが使われることが多い。
 
・年齢入力フォームでの利用例
 
例4
 
<select name="age">
  <option>1才</option>
  <option>2才</option>
  <option>3才</option>
  <option>4才</option>
  <option>5才</option>
</select>
 
このような年齢入力フォームを作りたいとき、これをHTMLで100才まで作るとなると、膨大なコピペ&年齢の書き換え作業が必要になる。これをプログラムによって自動化したい場合が例5.
 
例5
 
<select name="age">
<?php
$i = 1;
while($i <= 100){
    echo "<option>".$i."才</option>";
    $i++;
}
?>
</select>
 
 
■for文によるループ処理
 
for(初期化式; 条件式; 変化式){
//繰り返し実行する処理
}
 
1から10を出力する同じ処理をwhileと比較すると例6になります。
 
例6
 
<?php
for($i = 1; $i <= 10; $i++){
    echo $i."\n";
}
?>
 
<?php
$i = 1;
while($i <= 10){
    echo $i."\n";
    $i++;
}
?>
 
数学で値を求めるときに様々な計算方法があるのと同じで、書いていることは同じだということがわかると思います。よりスマートに計算しただけです。
 
■for文の応用
西暦と平成の対応表を例7に書いてみます。
 
例7
 
<?php
for($year = 1989; $year <=2015; $year++){
    $heisei = $year - 1988;
    echo "西暦".$year."年は平成".$heisei."年です\n";
}
?>
 
平成元年の1989年~2015年までをループで出力する
ループの各西暦年出力時に平成年を計算して出力する
1989 + x = 1
x = 1 - 1989
x = -1988
よって、$heiseiは$year - 1988になります。