私は次のようなPHPスクリプトを持っています:
<?php
$a = [1 => 1, 2 => 2, 3 => 3];
for ($x=1; $x<10; $x++) {
$r = array_rand($a);
echo $a[$r] . '<br>';
}
?>
この出力は毎回ランダムですが、例として次のようになります。
2 1 3 3 2 3 1 3 2
私が達成しようとしているのは、値が出力されるたびに、前の値とは異なることを確認することです。したがって、上記の例では、33を発生させたくありません。
「現在の」出力値をと呼ばれる変数に格納し、$current_value
次に出力されるものではないことを確認するという独自の解決策を考え出そうとしました。
<?php
$a = [1 => 1, 2 => 2, 3 => 3];
$current_value = false;
for ($x=1; $x<10; $x++) {
if ($current_value) {
$r = array_rand($a);
while ($current_value !== $r) {
echo $a[$r] . '<br>';
$current_value = $a[$r];
}
} else {
$r = array_rand($a);
echo $a[$r] . '<br>';
$current_value = $a[$r];
}
}
?>
(少なくとも私がテストしたものからは)同じ値が順番に表示されることはありませんが、ループは通常は$x<10
。未満の乱数のみを出力します。ここでの私の推測は、処理$current_value == $r
するものがないので、単に何も出力しないということですか?
誰かがこれを達成する方法についてアドバイスできますか?期待される出力はfor
、シーケンスにオーバーラップのない9個(またはループカウンターが設定されているもの)の整数です。
2 1 3 1 2 3 1 3 2
編集:出力される値は常に1、2、または3でなければなりません。これが私が$a
定義どおりに使用していた理由です。
私はこのコードがあなたが望むことをするだろうと信じています:
<?php
$a = [1, 2, 3];
$current_value = false;
for ($x=1; $x<10; $x++) {
$r = array_rand($a, 1);
if ($current_value !== $r) {
echo $a[$r] . '<br>';
$current_value = $r;
}else{
$x--;
}
}
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加