PHPのforeachループ完全ガイド!配列操作の基本構文と実践サンプル集
はじめに
PHPが提供するループ構文のひとつであるforeach文について解説します。while文・do while文・for文などの他のループ構文が、条件式やカウンタにもとづいた繰り返し処理を行うのに対し、foreach文は配列の要素を先頭から順に処理することに特化した構文で、配列操作の場面で非常に便利です。
基本構文
foreach (array_expression as $value) statement foreach (array_expression as $key => $value) statement
1つ目の形式は、インデックス配列(添字配列)の要素を反復処理します。ループが1回まわるごとに、現在の要素が$value変数に代入されます。PHPは内部ポインタを自動的に管理しており、ループ本体の処理が終わるたびに次の要素へと進み、配列の末尾に達した時点でループが終了します。各要素の値は、foreachに続くループ本体内で自由に利用できます。
2つ目の形式は、連想配列の走査に適しています。各反復処理のたびに、現在の要素が「キー」と「値」に分解され、それぞれ$key変数と$value変数に格納されます。ループ本体の処理が完了すると、ポインタは次のキーと値のペアへ移動し、すべての要素を処理し終えた時点でループが終わります。
例1:インデックス配列の走査
<?php
$arr = array(2,4,6,8,10);
foreach ($arr as $i){
echo $i . "*2=" . $i*2 . "\n";
}
?>
このコードを実行すると、次の結果が出力されます。
2*2=4 4*2=8 6*2=12 8*2=16 10*2=20
例2:連想配列の走査
<?php
$arr = array("Phy"=>50, "Che"=>60, "Maths"=>70, "Bio"=>80);
foreach ($arr as $sub=>$marks){
echo "marks in $sub: " . $marks . "\n";
}
?>
このコードを実行すると、次の結果が出力されます。
marks in Phy: 50 marks in Che: 60 marks in Maths: 70 marks in Bio: 80
例3:ネストしたforeachによる2次元配列の走査
2次元配列を走査したい場合は、foreach文を入れ子(ネスト)にして使います。外側のループが各行を取り出し、内側のループがその行の各要素を処理します。
<?php
$arr1=[1,2,3,4,5];
$arr2=[6,7,8,9,10];
$twodim=[$arr1,$arr2];
foreach ($twodim as $row){
foreach ($row as $col){
echo $col . " ";
}
echo "\n";
}
?>
このコードを実行すると、次の結果が出力されます。
1 2 3 4 5 6 7 8 9 10
例4:連想配列を含む2次元配列の走査
次の例では、「生徒1人分の情報を表す連想配列」を要素として持つ2次元配列を、ネストしたforeachで走査しています。
<?php
$arr1=["rno"=>1, "name"=>"Kiran", "marks"=>50];
$arr2=["rno"=>2, "name"=>"anil", "marks"=>60];
$arr3=["rno"=>3, "name"=>"Bina", "marks"=>70];
$twodim=[$arr1,$arr2,$arr3];
foreach ($twodim as $row){
foreach ($row as $k=>$v){
echo $k . ":" . $v . " ";
}
echo "\n";
}
?>
このコードを実行すると、次の結果が出力されます。
rno:1 name:Kiran marks:50 rno:2 name:anil marks:60 rno:3 name:Bina marks:70
補足:参照渡しで配列の値を直接変更する
$valueの前に「&」を付けると、要素が参照渡しになるため、ループ内で元の配列の値を直接書き換えられます。
<?php
$arr = [1, 2, 3];
foreach ($arr as &$v){
$v *= 10;
}
unset($v); // ループ後に参照を解除しておくのが安全
print_r($arr);
?>
このコードを実行すると、$arrの中身は [10, 20, 30] に書き換わります。
まとめ
foreach文は、配列の要素をシンプルかつ安全に反復処理できるPHPの強力なループ構文です。インデックス配列・連想配列のどちらにも対応し、ネストさせれば2次元配列も自在に扱えます。配列を扱う場面では、まずforeachの活用を検討してみましょう。
-
C#のforeachループとは?基本構文とLinkedListを使った実例でわかりやすく解説
C#におけるforeachループは、System.Collections.IEnumerableまたはSystem.Collections.Generic.IEnumerable<T>インターフェースを実装している型のインスタンスに含まれる各要素に対して、指定したステートメント(文)やステートメントブロックを繰り返し実行するための制御構造です。配列やリスト、LinkedListなどのコレクションを扱う際に、インデックスを意識せずシンプルに記述できるため、C#プログラミングにおいて非常に頻繁に使用されます。foreachループの基本構文foreach(要素の型 変数名 in コレクシ
-
C#でStringBuilderをforeachループで反復処理する方法
C#では、StringBuilderとforeachループを組み合わせることで、配列やコレクションの要素を効率的に1つの文字列へ連結できます。ここでは、文字列配列の各要素をStringBuilderに追加して出力する基本的な手順を紹介します。手順1: 文字列配列とStringBuilderを用意するまず、文字列配列とStringBuilderオブジェクトを作成します。// 文字列配列 string[] myStr = { One, Two, Three, Four }; StringBuilder str = new StringBuilder(We will print now...).Ap