在php中避免重复随机数组输出

时间:2013-10-21 12:14:53

标签: php arrays duplicates

我目前正在开发一个关于php的学校项目。任务是设计一个带有一些php导航,计算器,真相和其他功能的网站。现在,我有一个问题,我想得到一些帮助。真相是一个php随机函数,它从我设置的数组中打印出一个“真相”。根据我给出的数字,真相也打印出不同数量的真相。例如:如果我在一个方框中输入“3”并按下回车键,它将发布三个真相。

现在的问题是:由于它完全随机化了它的输出,我倾向于在彼此之后得到相同的真理。例如,我要求10个真理,其中4-5个与其他真理相同。因此,我想知道是否有人知道如何避免一遍又一遍地发布相同的真相。我认识的人建议暂时从数组中删除真相,但我不确定我将如何做到这一点。

有什么想法吗?非常感谢= P

我的代码:

<html>
<body>


<div id="Sannsigar">
<?php

if(isset($_POST["psc"])) {
$adder1 = $_POST["i1"];

$SannOutput= "";

    $Val = array("1=Ichi","2=Ni","3=San","4=Shi/Yon","5=Go","6=Roku","7=Nana","8=Hachi","9=Kyu","10=Jyu");

    switch ($adder1) {

        case "1" : {
        for ($x=1; $x<=$adder1; $x++) 
        {
        echo $Val[array_rand($Val)] . "<br>"; }
        "<br>";
        break;
        }

        case "2" : {
        for ($x=1; $x<=$adder1; $x++) 
        {
        echo $Val[array_rand($Val)] . "<br>"; }
        break;
        }

        case "3" : {
        for ($x=1; $x<=$adder1; $x++) 
        {
        echo $Val[array_rand($Val)] . "<br>"; }
        break;
        }

        case "4" : {
        for ($x=1; $x<=$adder1; $x++) 
        {
        echo $Val[array_rand($Val)] . "<br>"; }
        break;
        }

        case "5" : {
        for ($x=1; $x<=$adder1; $x++) 
        {
        echo $Val[array_rand($Val)] . "<br>"; }
        break;
        }

        case "6" : {
        for ($x=1; $x<=$adder1; $x++) 
        {
        echo $Val[array_rand($Val)] . "<br>"; }
        break;
        }

        case "7" : {
        for ($x=1; $x<=$adder1; $x++) 
        {
        echo $Val[array_rand($Val)] . "<br>"; }
        break;
        }

        case "8" : {
        for ($x=1; $x<=$adder1; $x++) 
        {
        echo $Val[array_rand($Val)] . "<br>"; }
        break;
        }

        case "9" : {
        for ($x=1; $x<=$adder1; $x++) 
        {
        echo $Val[array_rand($Val)] . "<br>"; }
        break;
        }

        case "10" : {
        for ($x=1; $x<=$adder1; $x++) 
        {
        echo $Val[array_rand($Val)] . "<br>"; }
        break;
        }


    default: {
    Echo "FEIL! Feil inndata. Oppgje eit tal mellom 1 og 10.";
    break;
    }

}

$Footer = fopen("Sannsigar/footer.php", "w");
fwrite ($Footer, "$adder1 sanning(ar) fr� Birger AS" . "<br>");
fclose($Footer);

}
?>

</div>

</body>
</html>

1 个答案:

答案 0 :(得分:0)

您无需为每个输入定义switch个案。您可以使用一个小功能实现相同的功能。

function getRandom($adder1, $Val) {
    $randoms = range(0, $adder1-1);
    shuffle($randoms);
    if ($adder1 <= count($Val)) {
        foreach ($randoms as $r) {
            echo $Val[$r]."\n";
        }
    }
}

可以按如下方式调用该函数:

getRandom(3, $Val);

示例输出:

9=Kyu
3=San
10=Jyu

Demo!