アルゴリズム

PHPアルゴリズムと関数

アルゴリズムとは

アルゴリズムとは問題を解決するための手順や計算方法ということで、簡単にいえば処理手順ということです。プログラミングにおける全てのアルゴリズムは3つの基本構造の組み合わせで表現できます。

3つの制御構造

プログラムの実行手順は順次実行、分岐実行、繰り返し実行です。

順次実行

ソースコードを上から順番に実行していきます。

分岐実行

条件を指定しておき、そのプログラムの実行結果によって次に実行する処理を切り替えます。

if文

条件を指定して、処理を実行するかしないかを決めます。

<?php
$num = 2;
if($num % 2 == 0){ //()内に記述された関係式の演算結果がtrueの場合、{}内に記述された処理を行います。
  print $num.'は偶数';
}

if($num % 2 == 0)
  print $num.'は偶数'; //1行の場合は{}を省略できます。


?>

else文

上のif文ではtrueの場合の処理のみ記述しましたが、else文も加えることでfalseの場合の処理も実行できます。

<?php
$num = 1;
if($num % 2 == 0){ //()内に記述された関係式の演算結果がtrueの場合、{}内に記述された処理を行います。
  print $num.'は偶数';
} else {
  print $num.'は奇数';
}
?>

if文のネスト

if文の中にif文を記述する入れ子構造にすることもできます。しかしif文をネストしすぎると可読性が低くなるので嫌う方も多いですので気をつけましょう。

<?php
$num = 2;
if($num > 0){
    if($num % 2 == 0){
        print $num.'は偶数';
    }
} else {
    print $num.'は0以下どす';
}
?>

elseif文

if…elseだと2つの条件を設定できますが、3つ以上の場合だとまたif文をネストしなければならないので無駄に複雑になります。そんな場合、3つ以上の条件を設定するためelseif文を使います。

<?php
$score = 80;
if($score == 100){
  print('満点です');
}else if($score >= 80){
  print('優秀です');
}else if($score >= 50){
  print('合格です');
} else {
  print('ドンマイ');
}

?>

ここで気をつけることは上から判定していき、条件に当てはまる処理を全て行います。80は50以上でも80以上でもありますので、2回処理されてしまうので上のコードでは大きい数値から比較していっています。

switch文

値が一致するかどうか判定して、一致すれば処理を実行するのがswitch文です。以下のように使います。

<?php
$num = 1;
switch($point){
  case 1://条件を「case 値:」と記述
    print '1です';
    break;//break文がないと以下の文全て実行します。
  case 2:
    print '2です';
 case 3:
  case 4://case は複数定義できます。
    print '3以上です';
  default://どの値にも一致しない場合の処理を書きます。
    print'end'; 
}

?>

繰り返し実行

処理を繰り返し実行します。回数を指定する場合もありますし、〜の間は繰り返すというような指定もできます。

for文

5回繰り返す処理をプログラムしたい場合以下のようにfor文を使い、実行させます。

<?php
for($i = 0; $i < 5; $i++){
  print $i;
}
?>

$i = 0でカウンタを初期化して0にしています。$i < 5の結果を見てtrueなのでprintを実行します。{}内の処理が終わったら$i++が実行され、$iの数値を1増やします。これで1回目の処理が終わり、繰り返すのでまた$i < 5の結果を見て…という感じで、$i < 5の結果がfalseになるまで繰り返されます。falseになると{}内の処理が実行されずfor文から抜けます。

while文

指定した条件がtrueである限り同じ処理を繰り返します。

<?php
$num = 10;
$i = 0;
while ($i < $num){
  print $i;
  $i++;//カウンタをインクリメントしないと無限に繰り返される。
}
?>

上の例では回数を指定する記述を行いましたが、無限ループを使う場合もあります。特定の条件を満たした時などにbreak文を使いwhile文から抜け出します。以下はbreak文を使って抜け出す例です。

<?php
$count = 0;
while (true){//条件式にtrueを使うと無限ループする。
  $count++;
  print $count.'回目の処理です'.'<br>';
  if($count == 5){
    break;
  }
}
print '入力が終了しました';
?>

do…while文

while文と違うところは、while文は最初から条件式がfalseの場合1回も処理を行いませんが、do…while文は必ず1回処理します。

$i = -1;
do{
  print $i;
  $i++;
}while ($i > 0);

break文とcontinue文

処理の途中で強制的に繰り返し処理を抜けたい場合はbreak文、その処理を中止して繰り返し処理の先頭に戻したい場合はcontinue文を使用します。

<?php
for($i = 0; $i < 5; $i++){
  if($i == 2){
    continue;
  } else if($i == 4){
    break;
  } else {
    print $i;
    print '<br>';
  }
}
?>

上のコードですと「013」と表示されることから、3回目の処理は出力処理を飛ばされ、5回目の処理の時にbreak文が実行されたので4が表示されていません。

foreach

foreachは配列の要素を順番に取り出したい場合にシンプルな記述で済みます。

<?php
$arr = array("あ", "い", "う", "え", "お");
print "あ行:";
foreach ($arr as $ALine) {
  print $ALine;
}
?>

foreachで配列の要素を書き換えたい場合、以下のように記述します。

<?php
$arr = array(1,2,3);
foreach ($arr as &$num) { //配列の値を格納する変数のアドレス参照
  $num *= 2;
}
unset($num);// $num変数を破棄して最後の要素への参照を解除している。

foreach ($arr as $num) { 
  print $num;
}
?>

コメント

タイトルとURLをコピーしました