1

私は現在、PHPに関する学校のプロジェクトに取り組んでいます。タスクは、いくつかの PHP ナビゲーション、電卓、真実を語る人、およびその他の機能を備えた Web サイトを設計することです。今、私は真実を語る人に問題があり、助けてもらいたいと思っています。Truthsayer は、私が設定した配列から「真実」を出力する PHP ランダマイザーです。また、真実を語る人は、私が与えた数に応じて、さまざまな量の真実を出力します。例: ボックスに「3」と入力して Enter キーを押すと、3 つの真実が投稿されます。

ここでの問題: 出力が完全にランダム化されるため、同じ結果が得られる傾向があります。たとえば、私は 10 個の真実を尋ねましたが、そのうちの 4 ~ 5 個は他の真実の 1 つと同じでした。したがって、同じ真実を何度も投稿しないようにする方法について、誰かがアイデアを持っているかどうか疑問に思っていました. 私が知っている誰かが、配列から真実を一時的に削除することを提案しましたが、それをどのように機能させるかはわかりません。

何か案は?よろしくお願いします=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>
4

1 に答える 1

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

デモ!

于 2013-10-21T12:20:35.107 に答える