1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

知らなきゃ現場で活躍できない! PHPの繰り返し処理(初学者の方向け)

Last updated at Posted at 2022-04-06

はじめに

PHPの基本をこの記事で書いていきます。
PHPの初学者の方向けの記事です。実際にコードを書いたりして
実際の挙動などを確認してみてください。

環境

MAMPをインストールします。
エディタはVScodeです。

環境構築方法

MAMPの環境構築が動画でわかりやすく載っていました。
PHPで出力する時はMAMPで出力するのでこちらを確認してください。

バージョン

以下のバージョンで挙動を確認しました。

スクリーンショット 2022-03-31 1.32.17.png

繰り返し処理

繰り返し何度も処理がされる処理のことです。

for文

繰り返し処理の代表で、これが理解できれば他の繰り返し処理を理解できます。
理由は他の繰り返し処理はfor文を応用しているからです。

これがあると何行も繰り返しコードを書かずに済みます。
効率化させるためにプログラミングをするのに、
非効率にめんどくさいことをすると何のためにプログラミングをやるんだとなってしまいます。

書き方は

for (初期化式; 判定式; 変化式) {
//  実行内容   
}

これを当てはめて0から5を出力します。

for ($count = 0; $count < 5; $count++){
    echo $count. "<br>";
}
//0
//1
//2
//3
//4

$count = 0;は初期化式です。 $count < 5は判定式で、
5より小さい数が出力されます。

$count++で+1変化していく意味です。
変化式は初期化式の段階では処理はされないです。

break

繰り返し処理を止めるためにbreakを使います。

for($num = 0; $num < 20;$num ++ ){
   if($num === 10){
    
   }
   echo $num. "<br>";
}
//19まで出力

次にbreakを入れて処理を9で止めます。

for($num = 0; $num < 20;$num ++ ){
   if($num === 10){
    break;
   }
   echo $num. "<br>";
}
//9まで出力

6000円以上働いたら帰るプログラムを出力してみます。
時給2000円計算で8時間労働を家庭します。

<?php
$money = 0;
for ($hour = 1; $hour <= 8; $hour++) {
    $money = $hour * 2000;
    if ($money > 6000) {
        echo "今" . $hour . "時間働いて" . $money . "円です。6000円以上働いたから帰る!";
        break;
    }
    echo "今" . $hour . "時間働いて" . $money . "円です</br>";
}
//今1時間働いて2000円です
//今2時間働いて4000円です
//今3時間働いて6000円です
//今4時間働いて8000円です。6000円以上働いたから帰る!

次に繰り返しの中の繰り返しを使います。
マラソンの処理をして見ていきます。
1日8時間走って1時間10km走って1時間あたり2回休憩がある過酷なマラソンを想定します。

$meter = 0;
$rest = 0;
for ($hour = 0; $hour <= 8; $hour++) {//時間のループ2回
    $meter = $hour * 10000;
    for ($i = 1; $i <= 2; $i++) {//休憩のループ2回
        $rest++;
        if ($rest > 10) {
            echo "今" . $rest . "回休憩して" . $meter . "メートル走ったのでおしまい";
            break 2;//2つ上の繰り返しで中断
        }
    }
    echo "今" . $hour . "時間走って" . $meter . "メートル走った<br>";
}
//今0時間走って0メートル走った
//今1時間走って10000メートル走った
//今2時間走って20000メートル走った
//今3時間走って30000メートル走った
//今4時間走って40000メートル走った
//今11回休憩して50000メートル走ったのでおしまい

continue

continueはbreakに比べて緩やかにスキップします。

for($num = 0; $num < 20;$num ++ ){
    if($num === 10){
     continue;
    }
    echo $num. "<br>";
 }
//10だけがスキップされて表示

今回の場合だと10だけがスキップされます。
ピッチャーの投げたイニングで次の日登板していいかダメかをチェックするプログラムを実行していきます。
5回まで投げたら次の日投げることはできないプログラムです。

for ($inning = 1; $inning <= 9; $inning++) {
    if ($inning >= 5) {
        echo "今" . $inning . "回投げた。 次の日は登板できません。<br>";
        continue;
    }
    echo "今" . $inning . "回投げた。 次の日は登板できます。<br>";
}

//フルで100球まで投げれるのでbreakで終わらせることはできない

//今1回投げた。 次の日は登板できます。
//今2回投げた。 次の日は登板できます。
//今3回投げた。 次の日は登板できます。
//今4回投げた。 次の日は登板できます。
//今5回投げた。 次の日は登板できません。
//今6回投げた。 次の日は登板できません。
//今7回投げた。 次の日は登板できません。
//今8回投げた。 次の日は登板できません。
//今9回投げた。 次の日は登板できません。

foreach

複数の値、配列の要素をまとめて処理したいときに使われるのがforeach文です。

foreach ($配列の変数 as $変数 ){
   実行内容;
} 

これを当てはめて実行してみます。
サッカー選手のリストを出力します。

$player_list = ["メッシ","ロナウド"," ネイマール"];

foreach ($player_list as $player){
    echo $player. "<br>";
}
//メッシ
//ロナウド
//ネイマール

$配列の変数は$player_listで$変数は$playerで好きに決められます。

foreachの中で配列のkeyを使う方法

foreachの中で配列のkeyを使う方法を説明します。

foreach ($配列の変数 as $キーの変数 => $変数){
    実行内容;
} 

これを先ほどのサッカー選手に当てはめてみましょう。
一緒にプレーしたい選手ということで1人出力させてみます。

メッシとプレイしたいなら

$player_list = ["メッシ","ロナウド"," ネイマール"];

foreach ($player_list as $key => $player){
    if ($key === 0){ //0は配列の添字
        echo $player. "とプレイしたい<br>";
    }
}
//メッシとプレイしたい

連想配列でも使える

連想配列でも使えます。選手を英語名から日本語に変換します。

$player_list = [
    "Messi" =>"メッシ" ,
    "Ronald"=>"ロナウド" ,
    "Neymar"=>"ネイマール",
];

foreach ($player_list as $key => $player){
    if ($key === "Ronald"){ 
        echo $player. "とプレイしたい<br>";
    }
}
//ロナウドとプレイしたい

foreach文の中で配列の要素の値を変える

foreach文の中で配列の要素の値を変えることをやっていきたいと思います。
フルーツの価格から2割引きする処理をします。
パターンが2パターンあるみたいなので、1パターン目をみていきます。

$fruits = [
    "apple" => 100,
    "orange" => 150,
    "pineapple"=>300, 
];

foreach ($fruits as $fruit){
  $fruit = $fruit * 0.8;
}
echo print_r($fruits). "<br>";
//Array ( [apple] => 100 [orange] => 150 [pineapple] => 300 ) 1

値が変わっていないので、書き換えてみます。
参照渡しという方法があるみたいです。
&を使ってforeachループ内で要素を参照渡しすると、
その要素を直接変更できます
こうして、ループの後に元の配列が更新された状態で残ります。

$fruits = [
    "apple" => 100,
    "orange" => 150,
    "pineapple"=>300, 
];

foreach ($fruits as &$fruit){   //&をつける
  $fruit = $fruit * 0.8;
}
echo print_r($fruits). "<br>";
//Array ( [apple] => 80 [orange] => 120 [pineapple] => 240 ) 1

&をつけただけで値が変わりました。

もう一つのやり方は配列の大元を書き換えるやり方です。
この場合だとfruitsを書き換えることになります。

$fruits = [
    "apple" => 100,
    "orange" => 150,
    "pineapple"=>300, 
];

foreach ($fruits as $key => $fruit){
  $fruits[$key] *= 0.8;
}
echo print_r($fruits). "<br>";
//Array ( [apple] => 80 [orange] => 120 [pineapple] => 240 ) 1

繰り返し処理の中で繰り返し処理

繰り返し処理の中で繰り返し処理を行う処理を見ていきます。
サッカー選手のリストを海外と日本で分けていきます。

大きな配列の中に配列が入っているイメージです。


$player_list = [
    "major" => [
        ["大谷", 28, "エンゼルス"],
        ["イチロー", 50, "マリナーズ"],
        ["松井", 48, "ヤンキース"]
    ],
    "NPB" => [
        ["村上", 23, "ヤクルト"],
        ["田中", 34, "楽天"],
        ["近藤", 29, "ソフトバンク"]
    ],
];

foreach ($player_list as $player_league) {
    foreach ($player_league as $baseball_player) {
        echo $baseball_player[0] . "は" . $baseball_player[1] . "歳で" . $baseball_player[2] . "所属です。<br>";
    }
}
//大谷は28歳でエンゼルス所属です。
//イチローは50歳でマリナーズ所属です。
//松井は48歳でヤンキース所属です。
//村上は23歳でヤクルト所属です。
//田中は34歳で楽天所属です。
//近藤は29歳でソフトバンク所属です。

実際の所属チームや年齢は変わったりするのでその点はご了承ください。
かなり複雑ですが、参考資料に動画で解説されているので見てみてください。

while

while文は何度も繰り返し処理をするためのものです。

$num = 0;
while($num < 5){
    echo $num;
    $num++;
}
//01234

5まで繰り返し処理をされます。

for文とwhile文の違い

for文とwhile文が紛らわしいので下に簡単な違いを説明しておきます。

⚫︎for文は繰り返す数が決まっていて、繰り返し回数を優先させる場合に使う

⚫︎while文は繰り返す数が決まっていなくて、条件を優先的に繰り返したい時に使う

do..while文

これはあまり使わないので説明は省きます。
下に記事を載せておくので読んでみてください。

PHPが全くわからない人向けの記事

参考資料

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?