Search

検索したいワードを入力してください

2019年04月10日

PHPでループ処理!for/while/foreach

PHPにもループ処理があります。ループ処理は繰り返したい処理をスマートにすっきりと書くことができる便利な制御構文です。PHPには繰り返し構文がいくつかあり、用途によって使い分けます。for文、while文、foreach文の3つの構文を紹介します。

ループ処理とは

ループ処理とは制御構文のうち、繰り返しを行う処理のことです

プログラムを作成する際に、一連の処理を繰り返して行いたい場合が多くあります。そんな時に同じ処理を何回も書いているとプログラマーにとってもシステムにとっても負担がかかります。数回の繰り返しならともかく、同じ処理を10000回以上行う処理を、直に書くのは現実的ではありません。

そんな時にループ処理を使うと繰り返したい処理の記述は一度だけで済みます。また、PHPの繰り返し処理にはいくつかあり、用途によって使い分けることができます。次から種類別にPHPでのループ処理の使い方を解説していきます。

ループ処理の基本的な使い方

前の章で述べた通り、PHPのループ処理にはいくつか種類があります。繰り返す回数が決まっているときに便利なfor文、繰り返す条件を自由に設定できるwhile文、配列に特化してループ処理を行うforeach文について解説します。

繰り返し回数をはじめから設定するfor文

PHPのfor文は繰り返し回数を設定することができるループ処理です。そのループ、ループごとの繰り返し回数に応じた処理も行うことができます。

PHPでのfor文の使い方

構文 for(初期化式; 条件式; 増減式){【繰り返したい処理】}

PHPのfor文では繰り返しをループさせるときのドライブ役として、カウンタ変数を設定します。

まず、カウンタ変数を初期化式で初期値を決めます。そして増減式でループが一回回るごとにカウンタ変数を変化させる式を定義します。

増減式によりカウンタ変数が変化していき、条件式で設定したカウンタ変数の条件に合わなくなったときにループ処理を抜けるという仕組みになっています。

具体的な例を見てみましょう。以下の例は1から1000までの整数の合計値を出し、画面に出力するコードです。


<?php

$sum=0; // 合計値を格納する変数

// カウンタ変数$iをループごとに1ずつ増やして加算
for($i=1; $i<=1000; $i++){
$sum+=$i;
}

echo "1〜1000の整数の合計値は".$sum; // 結果の出力

?>

出力結果
1〜1000の整数の合計値は500500

上の例ではカウンタ変数$iを初期化式「$i=1」で1に初期化しています。そして増減式「$i++」でループの終わりに$iをプラス1しています。条件式「$i<=1000」はループを継続する条件です。1ループが終わるたびに1が加算される$iはやがて1000になります。

$i=1000のときのループの終わりに1が加算され、$i=1001となります。このとき、「$i<=1000」の条件から外れるのでループ処理が終わりとなります。

for文をネストする

for文のネストとはfor文の中でさらにfor文を書いていくことを言います。各ループの回数ごとにさらに繰り返し処理を書いていきます。

例を見てみましょう。以下は、かけ算九九の表を出力するプログラムです。


<?php

for($i=1; $i<=9; $i++){
for($j=1; $j<=9; $j++){
echo $i * $j;
echo "&nbsp;";
}
echo "<br>";
}

?>

出力結果
1 2 3 4 5 6 7 8 9 
2 4 6 8 10 12 14 16 18 
3 6 9 12 15 18 21 24 27 
4 8 12 16 20 24 28 32 36 
5 10 15 20 25 30 35 40 45 
6 12 18 24 30 36 42 48 54 
7 14 21 28 35 42 49 56 63 
8 16 24 32 40 48 56 64 72 
9 18 27 36 45 54 63 72 81 

この例のポイントは、外側のループ処理と内側のループ処理でカウンタ変数は$iと$j、別のものとして定義することです。

外側のループの$iは「段」の数字です。1の段から9の段までループが繰り返されます。
内側のループの$jは九九の表の「列」の数字です。各段の数字ごとに1〜9まで$jが変化します。

この内側のループでは「$i * $j」、つまり、「格段の数字×1〜9の数字」の計算結果が出力され、その後スペースも出力されます。外側のループの終わりは、その「段」の終わりなので改行が出力されています。

このようにfor文をネストすると複雑な処理もシンプルに書くことができます。

条件を満たしているうちは繰り返し続けるwhile文

PHPのwhile文は、設定した繰り返す条件を満たす間繰り返し続けることができます。

PHPでのwhile文の使い方

構文 while(ループ継続条件){【繰り返したい処理】}

while文の()の中にループ処理を行う条件を記述します。以下の例を見てみましょう。


<?php

$sum=0; // 合計値を格納する変数

$i=1; // カウンタ変数$iの初期化
while($i<=1000){
$sum+=$i;
$i++;
}

echo "1〜1000の整数の合計値は".$sum; // 結果の出力

?>

出力結果
1〜1000の整数の合計値は500500

PHPのwhile文でカウンタ変数を使用する場合はカウンタ変数をコードの中で初期化し、変数を変化させる処理を書く必要があります。また、while文の条件式にはカウンタ変数の条件を設定します。

このように、決まった回数だけループを繰り返す処理も行うことができますが、while文では条件式を自由に設定することができるので、繰り返す回数が決まっていない場合にも使用することができます。

while文をネストする

for文と同じようにwhile文はネストすることもできます。以下の例はfor文で扱ったかけ算九九のサンプルをPHPのwhile文でかいたものです。


<?php

$i=1;
while($i<=9){
$j=1;
while($j<=9){
echo $i * $j;
echo "&nbsp;";
$j++;
}
echo "<br>";
$i++;
}

?>

出力結果
1 2 3 4 5 6 7 8 9 
2 4 6 8 10 12 14 16 18 
3 6 9 12 15 18 21 24 27 
4 8 12 16 20 24 28 32 36 
5 10 15 20 25 30 35 40 45 
6 12 18 24 30 36 42 48 54 
7 14 21 28 35 42 49 56 63 
8 16 24 32 40 48 56 64 72 
9 18 27 36 45 54 63 72 81 

配列専門でループ処理を行うforeach文

PHPには配列に特化してループ処理を行うforeach文という処理もあります。

PHPでのforeach文の使い方

構文 foreach(配列 as 仮変数){【繰り返したい処理】}

PHPのforeach文は指定した配列の要素分処理を繰り返します。
要素1つ分で一回のループ処理が行われ、その際の要素は仮変数に代入されます。

以下の例を見てみましょう。配列$arrの各要素をforeach文で取り出し、画面に出力しています。


<?php

$arr = array("apple", "banana", "melon");

foreach($arr as $val){
echo $val."<br>";
}

?>

出力結果
apple
banana
melon

また、PHPの連想配列でforeach文を使う場合には以下の構文も便利です。

構文 foreach(配列 as 仮変数1 => 仮変数2){【繰り返したい処理】}

要素1つ分で一回のループ処理が行われ、その際の要素の値は仮変数2に代入されます。そして、上の書き方をすると、便利なことにその要素のキーも仮変数1に代入してくれます。

以下の例を見てみましょう。


<?php

$arr = array("apple"=>200, "banana"=>100, "melon"=>500);

foreach($arr as $key => $val){
echo $key.":".$val."<br>";
}

?>

出力結果
apple:200
banana:100
melon:500

foreach文をネストする

for文とwhile文と同様、PHPのforeach文もネストさせることができます。

下記の例はfor文とwhile文でも扱った、かけ算九九の表を出力するプログラムです。配列$arr1と$arr2に1〜9までの整数が保存されており、その要素をforeach文で取り出して処理を行っています。


<?php

$arr1 = array(1, 2, 3, 4, 5, 6, 7, 8, 9);
$arr2 = array(1, 2, 3, 4, 5, 6, 7, 8, 9);

foreach($arr1 as $val1){
foreach($arr2 as $val2){
echo $val1* $val2;
echo " ";
}
echo "<br>";
}

?>

出力結果
1 2 3 4 5 6 7 8 9 
2 4 6 8 10 12 14 16 18 
3 6 9 12 15 18 21 24 27 
4 8 12 16 20 24 28 32 36 
5 10 15 20 25 30 35 40 45 
6 12 18 24 30 36 42 48 54 
7 14 21 28 35 42 49 56 63 
8 16 24 32 40 48 56 64 72 
9 18 27 36 45 54 63 72 81 

ループを終了・スキップさせる

繰り返し処理とはいえ、ループを途中で終了させたり、ある条件のときだけ処理を行わないようにしたいときもあります。PHPの繰り返し処理にもループの強制終了とスキップの処理が用意されています。

ループの途中で処理を終了するbreak

構文 break;

ループの途中で強制的に処理を終了します。

以下の例は、for文を使って1から10の整数を順番に出力する例ですが、if文とbreak文を用いてループを強制的に終了させ、6から先を出力させていません。


<?php

// カウンタ変数$iをループごとに1ずつ増やして加算
for($i=1; $i<=10; $i++){
if($i==6){
echo "終了します";
break;
}
echo $i."<br>";
}

?>

実行結果
1
2
3
4
5
終了します

ループの途中で処理をスキップするcontinue

構文 continue;

ある回数のループのみ、continue文以降の処理をスキップします。

以下の例は、for文を使って1から10の整数を順番に出力する例ですが、if文とcontinue文を用いてループをスキップしています。整数6のみ出力させていません。


<?php

// カウンタ変数$iをループごとに1ずつ増やして都度出力
for($i=1; $i<=10; $i++){
if($i==6){
echo "スキップします";
continue;
}
echo $i."<br>";
}

?>

出力結果
1
2
3
4
5
スキップします
7
8
9
10

まとめ

いかがでしたでしょうか。
PHPのループ処理、for文、while文、foreach文をご紹介しました。用途によって使い分けることができ、繰り返し処理をスッキリと書くことができることがお分かりいただけたかと思います

ぜひPHPでループ処理を使いこなして、繰り返し処理をスマートに効率よく記述してくださいね。

【PR】多くの人がプログラミングを諦めてしまう理由をご存知ですか?



近年プログラミングを勉強する人が増えています。

プログラミング学習者の多くは独学から取り組もうとしますが、だいたい80%ほどは3ヶ月も続かずに諦めてしまいます。早い人は1日目で。

多くの人がプログラミングを独学しようとして諦める理由は、次の3つ。
●モチベーションが維持できない
●エラーの原因・解決方法が分からない
●どう学習すればよいか分からない

TechBoostというプログラミングスクールでは、みんなと一緒にプログラミングをするのでモチベーションの維持ができ、分からないことがあればマンツーマンで教えてくれ、徹底的に研究された初心者向けの教材が揃っています。

TechBoostを卒業後、実際にエンジニアとして転職した方もいるほど。

本気でプログラミングを学びたい方は、一度無料のカウンセリングでご相談ください。プログラミングを嫌いになる前に。

tech boostについて

オーダーメイド型の学習コンテンツを提供する「tech boost」 は、エンジニアのキャリア支援に特化したサービスを複数展開している株式会社Branding Engineerが運営しているプログラミングスクールです。最短3ヶ月間で、未経験から『プログラミングの基礎』、『実際に業務で必要となるスキル』、『今のトレンドとなっている知識』まで学べ、ご希望の方にはプロのキャリアアドバイザーによる就業支援を行うことができます。

tech boost卒業生インタビュー

tech boostの卒業生の声を聞きました。あなたがプログラミングを学びたい理由を、一度考えてみてください。
営業→Javaエンジニア→Rubyエンジニアと転向し、第一志望のFinTech企業で働く山下さん
元営業、ビジネスのわかるエンジニアを目指す菅原さん
サンフランシスコに交換留学し、シリコンバレーのVCでインターン中の梅本さん
予備校の営業から半年でエンジニア転職を果たした小田島さん

tech boostの口コミ



Related