PHP7.4.1におけるdo-while文について。
//①while文のパターン
$aaa = rand(1, 6); //サイコロを振る(1~6のランダムな値)
while ($aaa !== 1) { //$aaaが1になるまでブレイス内のスクリプトを延々とループ処理
echo "倍プッシュだ({$aaa})\n"; //$aaaが1以外のときに実行
$aaa = rand(1, 6); //またサイコロを振る
}
echo "来たぜぬるりと。"; //1がでてwhileループが終わったら実行
//②do while文のパターン
do {
$aaa = rand(1, 6); //サイコロを振る
echo "倍プッシュだ({$aaa})\n"; //$aaaの値に関係なく実行(1でも1回は実行される)
} while ($aaa !== 1); //$aaaが1以外であれば上の行のブレイス内の処理を再度実行
echo "来たぜぬるりと。"; //1がでてwhileループが終わったら実行
do-while文はwhile文の一種です。
ただdo-while文はwhileと違って、doのブレイス(波括弧)内に記述したスクリプトがwhileの条件式の結果に関係なく1度は必ず実行されます。
上記①のプログラムはwhile文なので、初回の$aaaの値が1であればwhile文のなかのスクリプトが実行されることはありません。
しかし②のプログラムはdo while文なので、$aaaの値が初回から1であったとしてもdoのブレイス内のスクリプトは必ず1回は実行されます。
do-while文の定形は以下のとおりです。
do {
条件を満たした際に繰り返したい処理;
} while (条件式);
rand関数は、第1パラメータに指定した数値から第2パラメータに指定した数値までの範囲の値からランダムに数値を1つ生成します。
なので、たとえば $aaa = rand(1, 6); と記述すれば、$aaaの中には1~6までの数値のいずれか1つがランダムで代入されます。
rand関数の定形は以下のとおりです。
rand(第1パラメータ, 第2パラメータ);
rand関数のパラメータにはint型の値のみが指定可能です。
またrand関数の返り値もint型となっています。
以上です。
●ぜんぜん関係のない小話
ちなみに上記①のプログラムを実行してみたところ、1が出るまでになんと37回もループが発生しました。
少ない試行回数では期待値なんてまったく当てにならないものですね。
もしこれが現実のギャンブルなら大損していたところでした。