【php】ループにループを入れるネスト(入れ子)の書き方

php-多重ループphp
書いてる人
あいりゅー

プログラミングを学びながら更新しています。
iPhone/iPad/Mac/Apple WatchなどのApple製品はこちらで主に更新しています。
麻雀の反省をひたすら掲載してるブログもやってます。

あいりゅーをフォローする

このページについて

このページではphpのループにループを入れる書き方の解説をしています。普通のループ処理なら書けるけど、ネストループになると意味不明という方向けの解説記事です。

基本的なループのおさらい

ループにループを入れるというのはそのままの通りなんですが、実際に考え出すと少しややこしいと思います。まずは基本的なループの一覧から。

$a = 5;
for ($i=0;$i==$a;$i++){
echo $i;
}

基本的なforループの書き方です。これは「$iを1ずつ加算して$aと同じ値になるまで繰り返し。処理内容は$iを出力する。」と言うものです。実行結果は012345となります。

$x = 0;
$z = 10;
while ($x<=$z){
echo $x;
$x++;
}

これはシンプルなwhileループです。「$xと$zを比較して、$xが$zより小さければ$xを出力して$x++の処理を行う」と言うものです。

今回はこの2つを中心にループのネスト処理を解説していきます。

最初に考える事

まずループのネスト構造を作る上で最初に考えることは「一番大きな事を解決する方法」ですね。例えば道順であったり、キャラクターを動かして出口まで辿り着くだったり。ケースはさまざまですが、まず考える事は一番大きな事をどうやって解決するかです。

今回は簡単に迷路脱出にします。ただしあまり複雑な迷路ではなく、シンプルなものにします。直線で進んだら勝手に出口に辿り着くレベルで良いです。この際のループ処理の書き方は以下の通りになります。

while(現在位置<=出口) {
前に進む;
}

自然言語で書くとこのようになります。実際には現在地や出口、前に進むと言ったものは全てユーザー定義関数として事前に作成しておくものですが、今回の趣旨ではないので省略します。

途中でアイテムを規定数だけ拾ってゴールしなければならない場合、アイテムを規定数だけ拾う必要があります。ただしそれ以上拾う必要は無いので、規定数だけ拾う処理を書きます。

$アイテム = 0;
while($アイテム<=規定数){
アイテムを拾う;
$アイテム++;
}

これでアイテムを拾うたびに$アイテム変数に1増えていき、規定数に到達したらアイテムを拾うのを辞めます。この2つのループを合体させると以下のようになります。

$アイテム = 0;
while(現在位置<=出口) {
前に進む;
while($アイテム<=規定数){
アイテムを拾う;
$アイテム++;
}
}

まず一番最初に使う変数を宣言します。ここで宣言しないとループのたびに0を宣言して1加算して再び0を宣言という無限ループに陥ります。そして一番大きな目標である「出口を目指す」ループを書きます。そしてその中で行う処理である「アイテムを規定数拾う」ループを書きます。

このように大きなループの中に小さなループを入れる事でスムーズに処理をさせる事ができます。実際には上のような処理を書くと「1歩進む→アイテムを5規定数まで集める→1歩進む」のような挙動になるのでif文で「アイテムがある場合かつアイテム所持数が規定数以下なら」という条件を設定する必要があったりします。

まとめ

ループの中にループを入れる書き方はいくつかの場面でコードを書く量を減らす役割を果たしてくれます。phpに限らず他言語でも使える手法なので考え方や扱い方に慣れておきましょう。

phpの基礎
phpとは?JavaScriptとの違いは?みたいなことから、基本の書き方などを解説。
echoとprint
画面に文字を出力する2種類の言語構造の使い方
変数
phpで使える変数の扱い方などを解説しています。
変数のスコープ(有効範囲)
変数のスコープについての解説です。
var_dump
変数の情報を見ることができる関数
print_r
変数の情報をわかりやすい形式で表示する関数
配列と連想配列
配列と連想配列の書き方と、便利な関数の解説など。
key
連想配列のキーを返してくれます。内部ポインタ関係あり。
count
配列や連想配列の要素数を数えてくれる関数の使い方解説。
ソート関数
配列に対してソートを行う関数の中から、代表的な5つの使い方解説です。
array_reverse
配列の中身の順番を反転させる関数です。
array_chunk
配列を指定した数で分割させるarray_chunk関数の使い方解説です。
array_combine
2つの配列を足して1つの連想配列にする関数です。
array_diff
2つの配列を比較して、存在しない値を出力する関数
array_push
配列に対して後方に要素を追加する関数
array_unshift
配列に対して先頭に要素を追加する関数。
array_shift
配列の先頭の要素を取り出す関数。
array_merge
複数の配列を統合して1次元の配列にする関数
array_intersect
2つの配列を比較して、両方に共通するものを出力する関数
include
includeを使って別のphpファイルを読み込む方法の解説。
if文
if文を使って処理を変更させる方法の解説。
switch文
switch文を使って複数の処理分岐を行わせたい時に使います。
forループ
forループを使って同じ処理を行わせる方法の解説です。
whileループ
whileループを使って同じ処理を行わせる方法の解説と注意点。
do-whileループ
do-whileループを使って同じ処理を行わせる方法の解説です。
foreachループ
foreachループを使って配列内のアイテム全てに処理を行う方法の解説です。
continue
ループ処理の残りをスキップしつつ、ループの先頭に戻る制御構造
ループのネスト構造(入れ子)
ループの中にループを入れる書き方や考え方の解説。
function
functionを使って自作の関数を作成・使用する方法の解説。
引数の種類と書き方解説
functionで扱う引数の種類と書き方を解説
return
returnの使い方と関数での使い方解説。
class
classを作成して変数と関数を1つにまとめる方法と使い方の解説。
constructとdestruct
classのインスタンス作成と同時に処理を行うconstructと、スクリプトの終了と同時に実行するdestructの解説です。
インターフェイス
インターフェイスという用語の解説と、実際の使い方解説
トレイト
コードを再利用するのに便利なトレイトの解説です。
列挙型
プログラム中で使う変数名をあらかじめ定義しておく。そんな感じの型。
PDOを使ってMySQLへ接続
PDOを使ってMySQLへ接続し、データを取得する方法の解説です。
データの加工と表示
PDOでデータベースから取得したデータを加工して表示する方法の解説です。
HTMLフォームのデータ受け取りと表示
HTMLで作ったフォームからのデータの受け取り方法と、その表示方法の解説です。
タイトルとURLをコピーしました