0

ランダムに生成された 4 つ (またはそれ以上) の値が同じかどうかを確認する最も簡単な方法を探しています。ここに do-while ループがあります...

do {
    $var_a = mt_rand(1, 2);
    $var_b = mt_rand(1, 2);
    $var_c = mt_rand(1, 2);
    $var_d = mt_rand(1, 2);
} while ($var_a == $var_b == $var_c == $var_d);

ただし、PHPはその$var_a == $var_b == $var_c == $var_d部分が好きではありません。$var_a、$var_b などの各組み合わせを個別にチェックして、それらが等しいかどうかを確認できることはわかっていますが、これを行うよりクリーンな方法はありますか?

編集:与えられた回答/コメントのほとんどは、このインスタンスでは問題ありません。20 種類の変数をチェックできるかどうか疑問に思っています。その場合、多数の組み合わせをすべてチェックするのは面倒です。しかし、この特定の状況について回答してくれた人々に感謝します。

4

5 に答える 5

1

これはどう?

function checkifequal () {
  if (func_num_args() <= 1)
    return true;
  else
    for ($i = 1; $i < func_num_args(); $i++)
      if (func_get_arg[0] != func_get_arg[$i])
        return false;
  return true;
}

do {
    $var_a = mt_rand(1, 2);
    $var_b = mt_rand(1, 2);
    $var_c = mt_rand(1, 2);
    $var_d = mt_rand(1, 2);
} while (!checkifequal($var_a, $var_b, $var_c, $var_d));

エラーをチェックしませんでしたが、さまざまな量のパラメーターで動作するはずです。

于 2013-08-04T23:57:20.167 に答える
0

配列を使用できます

<?php
do {
    $var = array();
    $var[] = mt_rand(1, 4);
    $var[] = mt_rand(1, 4);
    $var[] = mt_rand(1, 4);
    $var[] = mt_rand(1, 4);
} while (count(array_unique($var)) != 4);
var_dump($var);

http://codepad.org/0vWi3jy5

2 つ以上の一意の値を許可するように変更mt_rand(1, 2)したことに注意してください。mt_rand(1, 4)

于 2013-08-04T23:27:32.410 に答える
0

これを試してください:

do {
    $var_a = mt_rand(1, 2);
    $var_b = mt_rand(1, 2);
    $var_c = mt_rand(1, 2);
    $var_d = mt_rand(1, 2);
} while (($var_a == $var_b)&&($var_a == $var_c)&&($var_a == $var_d));
于 2013-08-04T23:21:49.587 に答える
0

AND 演算子を使用してみてください

while ($var_a == $var_b && $var_b == $var_c &&  $var_c == $var_d && $var_d == $var_a);

それがうまくいくことを願っています

よろしく

シヴァ

于 2013-08-04T23:22:07.957 に答える
0

以下よりもはるかに読みやすくすることはできません。

$var_a == $var_b && $var_a == $var_c && $var_a == $var_d
于 2013-08-04T23:24:28.937 に答える