HOME -> プログラム -> PHP Script -> PHP ループ

PHP ループ

while

 while は条件が真の間ループし続けます。 解説より実際にやってみた方が早いですよねー
<?php
$i = 5;
while($i){
	echo("No $i<br>");
	$i --;
}
?>
 以下結果表示
No 5
No 4
No 3
No 2
No 1
 だいたい判りますよね。 while直後の ( ) 内に式を入れて、真の間は { } 内を繰り返すわけです。

do while

 while では判定式が初回からfalseであった場合、処理は一度もされることがありません。 最低でも一回はさせたい、という場合は do ~ while を使います。
<?php
$i = 5;
do{
	echo("No $i<br>");
	$i --;
}while($i > 10)
?>
 while判定は初回からfalseですが、処理されてから判定が行われます。 ですので上記例文では一回分の処理が行われてからループを抜けるという形になります。

for

 ループといえば while ともう一つ、 for がありますが・・・
<?php
for($i = 0;$i < 5;$i++){
	echo("No $i<br>");
}
?>
 以下結果表示
No 0
No 1
No 2
No 3
No 4
 forの直後の ( ) 内に式を記入しますが、初期条件;ループの条件;ループ後に行われる式、という書式を持ちます。 ここでは $i に 0 を代入して、ループ毎に++ でインクリメントを行い、$i が5以下の間処理が行われる、 という意味になります。

ループ制御

 whileとforの基本的な使用方法を先ほど解説しました。 ここでは更にループに対して細かい制御を行いたい場合を例に解説を行いたいと思います。
<?php
for($i = 0;$i < 5;$i++){
	if($i == 3)
	break;
	echo("No $i<br>");
}
?>
 以下結果表示
No 0
No 1
No 2
 ここで行ったのは途中でループを抜け出すというものです。 コードのbreakが実際に抜け出す部分になります。 ここの場合では $i が3であった場合にループを抜け出す事になります。
<?php
for($i = 0;$i < 5;$i++){
	if($i == 3)
		continue;
	echo("No $i<br>");
}
?>
 以下結果表示
No 0
No 1
No 2
No 4
 一方こちらではループを抜け出すのではなく、残りの処理を行わず次のループへ移るというものです。 コード中の continue がそれにあたります。 ここでは $i が3の時残りの処理(ここでは表示)を行わずにループを進めています。

foreach

 配列から値を順に取り出してゆきたい時、もちろんforからでも取り出す事が出来ます。 最大値に配列の要素数を返す count() 関数を使えばよいだけです。
<?php
$res = 0;
$ii = array(1,3,4,8);
for($i = 0;$i < count($ii);$i++){
	$res += $ii[$i];
}
echo $res;
?>
 以下結果表示
16
 ですが、上記の様な場合は foreach を使用したほうがもっと効率的です。 以下、は先ほどのコードを foreach を使用して書き直しています。
<?php
$res = 0;
$ii = array(1,3,4,8);
foreach($ii as $i){
	$res += $i;
}
echo $res;
?>
以下結果表示
16
 foreach では 左側に配列を用意し、その要素値を右側に順繰りに代入してゆきます。 また、この拡張で以下の様な事も可能です。
<?php
$ii = array("tani"=>28,"ookawa"=>43,"yamada"=>18);
foreach($ii as $k => $i){
	echo "$k さんは $i 歳です<br />";
}
?>
 以下結果表示
tani さんは 28 歳です
ookawa さんは 43 歳です
yamada さんは 18 歳です
 この場合、右側に要素を代入する際、要素キー => 要素値 という形で代入を行います。 結構これは役にたつ方法です。
 最後に注意ですが、foreach に渡す変数は配列でなくてはいけません。 先のページで文字列が配列のように扱えるという例を紹介しましたが、 正確には文字列は配列ではないので foreach に渡そうとするとエラーになってしまいます。


2008年 9月 28日ドキュメント作成
2008年 10月 30日ドキュメント更新