スキップしてメイン コンテンツに移動

PHPでループ制御:for文・while文・do-while・foreach文・break・continue・ループ処理・反復処理

PHPでループ制御:for文・while文・do-while・foreach文・break・continue・ループ処理・反復処理

概要

PHPにおけるループ処理は、for文・while文・do-while文・foreach文など多様な構文で実装できます。この記事では各ループ構文の基本と、break・continueでのループ制御、さらに反復処理の実装パターンを解説します。初心者でも実際にコードを書きながら理解できるように、サンプルコードを豊富に掲載します。

for文

for文はインデックスを使った反復処理に最適です。初期化・条件式・更新式を1行で記述できます。

for ($i = 0; $i < 5; $i++) {
    echo $i . " ";
}
// 出力: 0 1 2 3 4 

配列の長さを取得する場合は count() を利用します。

$arr = ["a", "b", "c"]; 
for ($i = 0; $i < count($arr); $i++) {
    echo $arr[$i] . " ";
}
// 出力: a b c 

while・do-while

while文は条件が真である限りループを継続します。do-whileは少なくとも1回は実行されます。

$i = 0;
while ($i < 3) {
    echo $i . " ";
    $i++;
}
// 出力: 0 1 2 
$i = 0;
do {
    echo $i . " ";
    $i++;
} while ($i < 3);
// 出力: 0 1 2 

foreach文

foreach文は配列やオブジェクトを簡潔に反復処理できます。キーと値を同時に取得することも可能です。

$colors = ["red", "green", "blue"]; 
foreach ($colors as $color) {
    echo $color . " ";
}
// 出力: red green blue 
$assoc = ["a" => 1, "b" => 2];
foreach ($assoc as $key => $value) {
    echo "$key => $value ";
}
// 出力: a => 1 b => 2 

break・continue

breakはループを完全に終了させ、continueは残りの処理をスキップして次のイテレーションへ移ります。ネストしたループでレベルを指定することもできます。

for ($i = 0; $i < 5; $i++) {
    if ($i == 3) break; // 3でループ終了
    echo $i . " ";
}
// 出力: 0 1 2 
for ($i = 0; $i < 5; $i++) {
    if ($i % 2 == 0) continue; // 偶数はスキップ
    echo $i . " ";
}
// 出力: 1 3 

ループ制御と反復処理

複雑なデータ構造を扱う際は、再帰やジェネレーターを組み合わせることで効率的な反復処理が可能です。再帰関数で階層構造を辿る例を示します。

function traverse($tree) {
    foreach ($tree as $node) {
        echo $node['name'] . "\n";
        if (!empty($node['children'])) {
            traverse($node['children']); // 再帰呼び出し
        }
    }
}
$sampleTree = [
    ["name" => "root", "children" => [
        ["name" => "child1", "children" => []],
        ["name" => "child2", "children" => [
            ["name" => "grandchild", "children" => []]
        ]]
    ]]
];
traverse($sampleTree);

ジェネレーターを使うと大規模データのメモリ消費を抑えつつ反復処理が可能です。

function generatorExample() {
    for ($i = 0; $i < 1000000; $i++) {
        yield $i;
    }
}
foreach (generatorExample() as $value) {
    // 処理
}

この記事はAIによって作成されました。

コメント