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) {
// 処理
}
コメント
コメントを投稿