Codeworks Notes

 2020-04-30

 2020-05-01

PHP
PHP基礎
プログラミング

ループ処理 [ 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() という便利な関数があるので、そちらも併せてご参照ください。