2

私は自分の娯楽のために単純な宝くじ番号ジェネレーターを構築しようとしています。明らかに繰り返しなしで、1 から 49 までの 6 つの数字を選ばなければなりません。

6 つの異なる変数に対してこの機能を使用してから、mt_randそれらを順番にエコーしようとしましたが、数値が繰り返される可能性があると思います。だから今、私は次のことを働かせようとしています。

<?php 
$randomString = substr(shuffle("1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20","21","22","23","24","25","26","27","28","29","30","31","32","33","34","35","36","37","38","39","40","41","42","43","44","45","46","47","48","49"), 0, 6); echo $randomString; 
?>

substr は配列ではなく文字列用であることは知っていますが、代替手段が見つかりません。

誰かが解決策を得ましたか?

4

5 に答える 5

4

array_slice配列から 6 つの数値を取得するために使用できます。

<?php
$numbers = range(1, 49);
shuffle($numbers);
$numbers = array_slice($numbers, 0, 6);
print_r($numbers);
?>
于 2013-08-17T22:01:56.367 に答える
1

より良い方法は、1 から 49 までの 6 つの異なる乱数を取得することです。

numbers = array();
for(i=1;i<=6;i++){
    do{
        pick = rand(1,49);
    }while (in_array(pick, numbers));
    numbers[] = pick;
}
于 2013-08-17T22:36:09.803 に答える
1

これは、以下のコードのrange()およびshuffle()関数を使用して実現できます。


function num_rand($min, $max, $val) {
   $range = range($min, $max);
   shuffle($range);
   $result = array_slice($range, 0, $val);

      foreach($result as $number) {
         $number_string .= $number . ', ';
      }

   return rtrim($number_string, ', ');
}


echo num_rand('1', '49', '6');
于 2013-08-17T23:01:23.037 に答える
0

6 つの数字をランダムにして、次のような繰り返しがないかどうかを確認することもできます。

<?php
srand();
$TOTAL = 6;
$MAX = 46;
$MIN = 1;

$numbers = array();
for($i = 0; $i < $TOTAL; $i++) {
do {
    $new_number = rand($MIN,$MAX);
}
while(in_array($new_number, $numbers));

echo $new_number . "<br>";
}
?>

私にとってこれは最も簡単な解決策ですが、それが最善の解決策であるかどうかはわかりません。

于 2013-08-17T22:32:58.180 に答える