输出字符串中唯一随机数的列表

时间:2014-01-25 05:36:15

标签: php

我有一组来自html表单的数字,例如:123456

我想输出x个独特的随机数,例如:143256 312456 453216

我搜索过并搜索过,无法找到如何做到这一点。

我正在使用此代码来重新排列原始数字,但不了解如何创建循环以输出x行数。

$numbers = array("$n1","$n2","$n3","$n4","$n5","$n6");
shuffle($numbers);
foreach ($numbers as $v) {
    echo = "$v ";
}

有人可以给我一个提示并指出我正确的方向 非常感谢您的帮助。

7 个答案:

答案 0 :(得分:0)

为了在PHP中生成随机数,您可以使用名为'mt_rand()'

的函数

此功能将返回最小和最大范围之间的数字。

为了获得一个随机大小的随机数列表,你可以简单地...

// Random numbers array
$randomNumbers = array();

// Create a random sized array between 1 and 30 values in length.
for($x = 0; $x < mt_rand(1,30); $x++) {
    // Generate a random number and push it onto the array.
    $randomNumbers[] = mt_rand(0, 99999);
}

// display the generated numbers
print_r($randomNumbers);
die();

为了使数字列表唯一,您可以在生成数字时执行检查以查看它是否在数字列表中。您可以使用in_array()

执行此操作

我不确定这是否能回答你的问题,希望能解决。

答案 1 :(得分:0)

使用for loop

<?php
$numbers=array("$n1","$n2","$n3","$n4","$n5","$n6");

$howManyRandomNumbers = 10; // This is how many you want.
for ($i = 1; $i <= $howManyRandomNumbers; $i++) {
    shuffle($numbers);
    foreach($numbers as $v) {
        echo "$v ";
    }
}
?>

请注意,这不会产生任意数字,只会是随机数字。

答案 2 :(得分:0)

Another attempt

$n1 = rand(100000,999999);
$n2 = rand(100000,999999);
$n3 = rand(100000,999999);
$n4 = rand(100000,999999);
$n5 = rand(100000,999999);
$n6 = rand(100000,999999);
$numbers = array($n1,$n2,$n3,$n4,$n5,$n6);

function code ($numbers)
{
    $code = "";
    foreach($numbers as $n)
    {
        $n .= ""; // turn $n into a string
        $code .= $n[rand(0,strlen($n)-1)];
    }
    return $code;
}

echo "numbers:\n";
foreach($numbers as $n) echo "$n\n";

echo "\ncodes:\n";
for ($i = 0 ; $i != 10 ; $i++) echo code ($numbers)."\n";

答案 3 :(得分:0)

我的猜测是你想要这个?

<?php
    $numbers=array($n1,$n2,$n3,$n4,$n5,$n6");
    for($i=0;$i<=10;$i++) {
        shuffle($numbers);
        foreach($numbers as $v) {
            echo $v;
        }
        echo "<br />\r\n";
    }
?>

答案 4 :(得分:0)

尝试

    $numbers  = array($n1,$n2,$n3,$n4,$n5,$n6);
    shuffle($numbers);
    foreach(array_slice(array_unique($numbers), $start,$limit) as $v)
       echo $v." ";

你有n1到n24的复选框,带有唯一值,所以说你想要“独特的随机数”让人感到困惑。

现在我建议你改变你的 <input name="n..." value="$value"><input name="n[]" value="$value">然后把它放在你的php

if($_SERVER['REQUEST_METHOD'] == 'POST'){
    $limit2 = $_POST["limit2"];
    $limit  = $_POST['limit'];

    /*
     *  Since you have input fields of n1 to n24 i put them in an array
     */
    $n  = array();
    if(isset($_POST['n'])){
        foreach($_POST['n'] as $key=>$value)
            $n[$key] = $value;  
        shuffle($n);
    }

    /*
     *  All your checkbox values are unique so i don't get what you mean by "unique values"
     */
    for($x = 0, $y = count($n) - 1; $x = 0; $x++,$y--) {

        $v = preg_replace(array('/\s{2,}/', '/[\t\n]/'), ' ', $n[$x]);

            echo $v ."
\r\n"; } }

希望这有帮助

答案 5 :(得分:0)

拿这个:

echo = "$v ";

并且这样做:

echo "$v 
";

这会在每个数字后面给你一个新行。

Live Demo :)

答案 6 :(得分:0)

WOW感谢投入的人们!

使用提供的答案,我的代码几乎完全符合我的要求:)

<?php
$numbers = array(
    "$n1",
    "$n2",
    "$n3",
    "$n4",
    "$n5"
);
for ($i = 0; $i <= $limit; $i++) {
    shuffle($numbers);
    foreach (array_slice(array_unique($numbers), 0, $limit2) as $v) {
        echo $v;
    }
    echo "<br />\r\n";
}
?>

此致