スクリプトの中で、同じ処理を繰り返す「ループ」は単独で利用されたり、、次節の「条件分岐」 と併用して利用されることもあります。ループは PHPスクリプト中で、非常に多く利用される「制御構文」の1つです。
PHPでは、ループを構成する4種類の制御構文が用意されています。while構文「while」です。whileは、その繰り返しのコードを実行する前に条件式を評価し、その式が満たされればループを抜けます。同時に、その式が最初から満たさなければ、ループを実行することがありません。while構文の基本的な形です。
while (式) {
処理スクリプト
}
while構文は、if構文に似ており、式を評価してから、中カッコ[ 〜 ] のブロックを実行します。言い換えれば、式にある条件を満たすことができなければ、ループを実行させることができません。
<?php
$a = 0;
$lectur = array("HTML","XHTML","XML","JavaScript","PHP");
while($a < 4) {
print($lectur[$a]). " \n";
$a++;
}
?>
while構文の条件式は、変数$a の値が4を超えたときにループから抜けるように設定されています。このスクリプトでは配列で定義された5つのインデックスのうち、4つまでを Webブラウザに出力しています。while構文のサンプル (EUC-JPで記述)for構文while構文と同じ繰り返し処理を行いますが、式の内容が異なります。
for (初期値式; 条件式; 増減式) {
処理スクリプト
}
JavaScriptの for構文 とまったく同じ公式です。初期値式には、ループを繰り返す前に必ず1回だけ実行され、その値に基づいて条件式で評価され、その値が「true」ならば、ブロック内の処理スクリプトを実行し、処理が終わったら増減式で初期値式の値を増やしたり減らしたりします。
<?php
for($a = 0; $a < 4; $a++) {
$lectur = array("HTML","XHTML","XML","JavaScript","PHP");
print($lectur[$a]). " \n";
}
?>
for構文では、初期値として変数$aに、1をセットしています。条件式では、$aが4を超えているかどうかを評価し、4以内であれば「true」と判断して、処理のスクリプトを実行します。処理後、$aの値に1を加えて、条件式を繰り返します。for構文のサンプル (EUC-JPで記述)do 〜 while構文while、for構文は、式を最初に評価してから処理スクリプトを繰り返すループですが、do〜while構文は、処理を最初に行ってから条件式を評価するという構文です。
do {
処理スクリプト
}
while(式);
<?php
$a = 0;
$lectur = array("HTML","XHTML","XML","JavaScript","PHP");
do {
print($lectur[$a]). " \n";
$a++;
} while($a < 4);
?>
do文で解釈して実行しています。処理が終わったら変数の増減式地を設定します。$aに 1を加えています。その後、while文によって変数の値を評価します。do〜while構文を使う場合には、その点に十分注意してください。do〜while構文のサンプルforeach構文foreach構文は、PHP4 から実装された比較的新しい制御構文です。このループ制御では、指定した配列の要素を1つづつ抜き取って処理します。
foreach( 配列 as $key => $value) {
処理スクリプト
}
$keyによって設定されたキーワードと共に格納されるインデックスと、$valueに格納されるインデックスとグループ化します。例えば、
<?php
$a = array("Apple" => "りんご", "Orange" => "みかん",
"Grape" => "ぶどう");
foreach( $a as $key => $value) {
print("$key は、$value<br>\n");
}
?>
$aに格納された配列は、キーワードが「=>」によって2つの値を対にしてそれぞれを取り込んでいます。foreach構文では、そのキーワードをもとにしてそれぞれの値を、変数$key、$valueにループしながら変換します。ループは、取り込まれたインデックスの数だけ行われます。foreach構文のサンプルbreakbreak文を使います。条件式だけでは指定できないループの脱出には便利な機能を持っています。break文は、foreach 以外のループ制御構文に利用できます。foreach構文では不可となります。
<?php
for($a = 0; $a < 4; $a++) {
$lectur = array("HTML","XHTML","XML","JavaScript","PHP");
print($lectur[$a]). " \n";
if($a == 3) {
print("ループを抜けます");
break;
}
}
?>