ループ処理 [ while ]
while 文は for 文と同じく同じ処理を繰り返すための構文です。
違いは for 文の記事にある通りループ回数が分かっているかどうか、という点で、while 文は総数が分からない繰り返しに使うことができます。
まずは書式から。
while 文の書式
while ( 条件式; ) {
// 処理内容
}
while 文は条件式のみで処理できます。
動きとしては、ループを実行するたびに条件式の内容を評価します。結果が true の場合は while 内の処理を繰り返し、評価の結果が false になった時点でループを抜けて次の処理に移ります。
記述例
$count = 0;//
while( $count <= 5 ){
echo $count."<br />";
$count++;
}
endwhile; // 省略可
出力結果
0
1
2
3
4
5
解説
この場合はループ開始前に「 $count = 0 」を指定し、ループ内で「 $count++ 」を使って値の更新をしながら $count が 5 になるまで echoを繰り返します。
また、break や continue も使えますので for 文と同様に捉えてください。
配列の出力
while 文を使った配列の出力のしかたです。
例として 2 つのパターンを挙げます。
一次元配列(値のみの配列)
$array1 = array(
'りんご',
'みかん',
'もも',
'なし',
'さくらんぼ',
'ヤシの実'
);
// while 文で出力
$count = count( $array1 );
$i = 0;
while( $i < $count ) {
echo $array1[$i] . '<br />';
++$i;
}
endwhile;
出力結果
りんご
みかん
もも
なし
さくらんぼ
ヤシの実
count() 関数は数を数えるためのもので、この場合は $array1 に含まれる配列の総数を数えていますので、$count には 6 が代入され、$i が 6 になるまでループ処理を行います。
連想配列
$array2 = array(
'apple' => 'りんご',
'orange' => 'みかん',
'peach' => 'もも',
'pear' => 'なし',
'cherry' => 'さくらんぼ',
'palm' => 'ヤシの実'
);
// while 文で出力
// PHP7.2 より each() は非推奨
// while( list( $key , $value ) = each( $array2 ) ) {
// echo $key .':'. $value . '<br />';
// }
// endwhile;
// each() の代替で current() と key() を使った書き換え
while( $value = current( $array2 ) ) {
echo key( $array2 ) .':'. $value . '<br />';
next( $array2 );
}
endwhile;
出力結果
apple:りんご
orange:みかん
peach:もも
pear:なし
cherry:さくらんぼ
palm:ヤシの実
current() 関数は配列から値を取得し、key() 関数は配列からキーを取得するときに使います。上記ソースの場合は $array2 の値を $value に格納し、キーを取得しながらループ出力しています。
ここでは総数をカウントしない代わりに current() 関数が配列の最後の「ヤシの実」まで取得しきった時点でループを終了しています。
どちらにしてもループの中で配列のキーや値を取得するのには foreach() という便利な関数があるので、そちらも併せてご参照ください。