如何在PHP中生成3个不同数字的随机变化


How to generate random variations of 3 different numbers in PHP?

我有这个数组:

$numbers = array(1, 2, 3);

我可以从中获取一个随机值,如下所示:

$numbers[array_rand($numbers)];

但我需要想出这些值的不同随机变化。例如

1
13
123
3
32
12
3
12
13
231
etc...

正如你所看到的,一个数字在每组中不能重复一次以上,所以我们不能有这样的集合:

113
232
33
etc...

如何做到这一点?

此解决方案允许您处理任何大小的数组。。。相同的操作。。

    <?php
    $numbers = array(1, 2, 3);
    $count=count($numbers);
    $result="";
    $iterations=rand(1,$count);
    for($i=0;$i<$iterations;$i++)
    {
        $selected=$numbers[array_rand($numbers)];
        $numbers=remove_item_by_value($numbers,$selected);
        $result=$result.$selected;
    }

    function remove_item_by_value($array, $val) {
        foreach($array as $key => $value) {
        if ($value == $val)
           unset($array[$key]);
        }
        return $array;
        }
    echo $result;
    ?>

现在它将返回一个随机大小的字符串:)。

定义数组,获取随机长度,打乱数组,切片数组:

$numbers = array(1, 2, 3);
$length = rand(1, count($numbers));
shuffle($numbers);
$result = array_slice($numbers, -$length);

演示

一种可能的解决方案是:

$number1 = array(1, 2, 3);
$number2 = array(1, 2, 3);
$number3 = array(1, 2, 3);
$loop = 10;
for($i=0;$i<$loop;$i++) {
  $bool1 = mt_rand(0, 1);
  $bool2 = mt_rand(0, 1);
  $randomNumber = $number1[array_rand($number1)];
  if($bool1)
    $randomNumber .= $number2[array_rand($number2)];
  if($bool2)
    $randomNumber .= $number3[array_rand($number3)];
  echo $randomNumber;
}

这两者都随机决定在1-3位数字之间进行选择,并且可以尽可能多次地使用数字1-3。只需将$loop更改为您想要运行生成器的次数。

我也刚刚意识到你可以进一步简化它:

$numbers = array(1, 1, 1, 2, 2, 2, 3, 3, 3);
$limit = mt_rand(1, 3);
$keys = array_rand($numbers, $limit);
$number = "";
if($limit == 1)
  $number .= $numbers[$keys];
else {
  foreach ($keys as $value) {
    $number .= $numbers[$value];
  }
}  

在数组中插入每个数字的最大次数,使其以任意数字出现(要生成的最大位数)。用mt_rand()随机生成一个1-3之间的数字,用作您的array_rand()极限。

好吧,定义"随机"(获得1位数长字符串、2位数长字符串或3位数长字符串的几率有多大?),但这里有一种方法:

$len = rand( 1, count( $numbers ) );
$result = '';
shuffle( $numbers );
for( $i = 0; $i < $len; ++$i ) {
    $result .= $numbers[ $i ];
}    

请注意,这将更改原始数组。如果不应该更改,请复制它。