for文では、3つの式を組み合わせて条件を指定します。式の間には「;(セミコロンで)」区切りをつけます。
<?php
for( $i = 1; $i < 6; $i++ ) {
echo "$i 回目のループです。<br />n";
}
?>
1 回目のループです。 2 回目のループです。 3 回目のループです。 4 回目のループです。 5 回目のループです。
上記のスクリプトでは、for( $i = 1; $i < 6; $i++ )でwhile文で記述されていた、$i = 1;や$i++がまとめられて記述されているのがわかります。
for文では3つの式を組み合わせて条件を指定することができるので、コード行の長さ自体を短縮できるというメリットがあります。
なお、ループ処理で1ずつ加算していくカウンターには、慣習として「$i」という名前の変数が使われます。ループが二重、三重に入れ子で作成される場合は、「$i」、「$j」、「$k」という順で変数名をつけることが慣習となっています。
<?php
for( $i = 1; $i <= 9; $i++ ) {
for( $j = 1; $j <= 9; $j++ ) {
echo "$i × $j = " . $i * $j . "<br />n";
}
}
?>
1 × 1 = 1 1 × 2 = 2 1 × 3 = 3 ・ ・ ・ 9 × 7 = 63 9 × 8 = 72 9 × 9 = 81
foreach文は配列用のループ処理文です。for文との違いは、for文は配列のキーが飛び飛びの数値であったり、文字列(連想配列)であった場合にはループ処理をすることができませんが、foreach文は文字列(連想配列)などでもループ処理をすることができます。
foreach( 配列 as $value )
<?php
// 配列を生成
$a = array(
100 => 1000,
150 => 1500,
200 => 2000
);
foreach( $a as $value ){
echo $value."<br />n";
}
?>
1000 1500 2000
上記スクリプトでは、「array()」で配列を生成し、変数$aに代入しています。$valueには、1000、1500、2000などの値が割り当てられます。
foreach文での連想配列をみてみます。
<?php
$animal = array(
"dog" => "犬",
"cat" => "猫",
"horse" => "馬"
);
foreach( $animal as $key => $value ){
echo $key. ":" .$value."<br />n";
}
?>
dog:犬 cat:猫 horse:馬
上記のスクリプトでは、「array()」で変数$animalに配列として、「"dog" => "犬","cat" => "猫","horse" => "馬"」を代入しています。そして、「foreach( $animal as $key => $value )」で、変数$animalのキーと値を変数$keyと変数$valueにそれぞれ割り当て、ループ処理をしています。
配列の要素に更に配列が格納されている配列を「多次元配列」と言います。多次元配列をforeach文で扱う場合には配列を入れ子にします。
<?php
$food = array(
"fruit" => array(
"strawberry"=> "いちご",
"peach" => "もも",
"apple" => "りんご"
), // ,(カンマ) で区切る
"vegetable" => array(
"carrot" => "にんじん",
"pumpkin" => "かぼちゃ",
"onion" => "たまねぎ"
)
);
foreach( $food as $key1 => $valu1 ){
echo "「".$key1. "」<br />n";
foreach( $valu1 as $key2 => $valu2 ){
echo $key2. ":" .$valu2."<br />n";
}
}
?>
「fruit」 strawberry:いちご peach:もも apple:りんご 「vegetable」 carrot:にんじん pumpkin:かぼちゃ onion:たまねぎ
上記のスクリプトでは、まず一番目の「array()」で「"strawberry"=> "いちご","peach" => "もも","apple" => "りんご"」が配列として生成され、同様に二番目の「array()」で「carrot" => "にんじん","pumpkin" => "かぼちゃ","onion" => "たまねぎ"」が配列として生成され、変数$foodに代入されます。配列を入れ子にする場合は、array同士の間を,(カンマ)で区切ります。
「foreach( $food as $key1 => $valu1 )」の「$food」には上記の入れ子された配列が入っており、その入れ子された配列からキーと値が割り当てられます。「$key1」には「fruit」と「vegetable」が、「$valu1」には「いちご」「もも」「りんご」「にんじん」「かぼちゃ」「たまねぎ」が入っています。「echo "「".$key1. "」n";」では変数$key1の中に入ってるキーが出力されます。
「foreach( $valu1 as $key2 => $valu2 )の」$valu1には上記で説明した値が入っており、「$key2」は「strawberry」「peach」「apple」「carrot」「pumpkin」「onion」が、「$valu2」には「いちご」「もも」「りんご」「にんじん」「かぼちゃ」「たまねぎ」が入っています。そしてそれらは、foreachで要素がある分だけ繰り返されています。