【问题标题】:get random number from pattern with unique digit从具有唯一数字的模式中获取随机数
【发布时间】:2011-08-05 17:32:48
【问题描述】:

假设模式是 123456。

在 php 中是否可以得到精确的六位数长度的数字,并且数字在生成的数字中不应重复多次。

456136 -- all digit are unique right

56136 -- wrong digit 4 is missing
456436 -- wrong digit 4 repeats

【问题讨论】:

  • 您想将“123456”随机排列吗?或者从头开始生成一个没有数字重复的 6 位数字?
  • @Marc Ya 它是随机播放。我本可以在 php 站点中搜索 shuffle 函数而不是按位移位 :(.

标签: php random unique


【解决方案1】:

如果您需要 1-6 位数字

str_shuffle('123456');

如果您需要 1-9 位数字

substr(str_shuffle('123456789'),0,6);

Manual

【讨论】:

  • +1 我不知道这个函数的存在——比像我那样重新发明轮子更好的解决方案^^
  • 另外,使用基本字符串"11223344556677889900" 最多可重复一位。
  • @Patrick:问题是 113456 会比 123456 少。你可以吗?
【解决方案2】:

您可以首先使用str_split() 将您的模式拆分为一个数字数组:

$pattern = '123456';
$digits = str_split($pattern);


然后,您可以在该数组上使用shuffle(),因此它的元素是随机顺序的:

shuffle($digits);


最后,您可以implode() 将该随机数组返回一个字符串:

$result = implode('', $digits);


转储该变量的内容:

var_dump($result);


你会得到这样的结果:

string(6) "645132"
string(6) "462513"
string(6) "542316"

总是六位数,总是你指定的数字;并且没有一个使用超过模式中指定的次数。

【讨论】:

  • 很好的解释,也很有效:)。(我很害怕,但无法使用@符号来称呼你的名字)
【解决方案3】:

这应该给你 0 次重复:

$random = array();
while(count($random) != 6)
{
    $random[] = rand(0, 9);
    $random = array_unique($random);
}
$random = implode('', $random);

【讨论】:

    【解决方案4】:

    你可以试试这个:

    $nums = array();
    
    while(count($nums)<=6){
        $rand = rand(0,9);
        if(!in_array($rand, $nums)){
             $nums[] = $rand;
        }
    }
    
    echo implode('',$nums);
    

    演示:

    第一次运行: http://codepad.org/31AKqeYz
    第二次运行: http://codepad.org/ckuUQCP3

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-10-11
      • 1970-01-01
      • 2011-06-30
      • 1970-01-01
      • 2019-05-21
      • 2011-02-20
      • 2011-09-22
      • 2020-12-05
      相关资源
      最近更新 更多