如何生成一个固定长度的随机数,只有0和1,固定数量为1?

时间:2015-05-23 10:18:46

标签: php loops random while-loop numbers

我做了一些研究,但没有为我的问题找到任何解决方案。

我要存档的内容:

从0($min)和1($max)中生成一个随机数,但随机数中的固定数量($many)为1。随机数的长度应为6,就像我的while循环(while($xLoop <= 6))。

这是我目前的代码:

$min = 0;
$max = 1;

$many = 3;
$xLoop = 1;

while($xLoop <= 6) {
    $nRand = mt_rand($min,$max);

    if($nRand == 1){ //if random number comes out number 1
         $many--; // Prevent number 1 more then $many...

         //Do something...
    }else{ //if random number comes out not number 1
         //Do something and still looping until get 6 times
    }

    echo $nRand.' - '.$many.'</br>'; //For debugin... i want to see how many number 1 comes out.

    $xLoop++;
}

它会循环6次,所以我们有一个长度为6的随机数,但是我希望在我的随机数中有一个固定的1,即$many(这里是3)。剩下的就是0,直到我们达到6的长度。

如何修复此代码?或者有更简单的方法吗?

1 个答案:

答案 0 :(得分:2)

这应该适合你:

无需循环。首先用1 $many次填充一个数组。然后array_merge()数组中包含0&#39; s,直到$length元素为止。

最后只有shuffle()数组和implode()打印它

<?php

    $min = 0;
    $max = 1;

    $many = 3;
    $length = 6;

    $arr = array_fill(0, $many, $min);
    $arr = array_merge($arr, array_fill($many, $length-$many, $max));
    shuffle($arr);

    echo implode("", $arr);

?>

可能的输出:

011010