0

これは私を困惑させました。基本的に私はカードを配ろうとしています。適切な数のカードを取得しましたが、ランダムに生成されたカードが複製されます。代わりに、ユーザーが 52 を入力した場合、52 の異なるカードが必要です。

私はこれをやろうとして上下に動いていましたが、それを理解することはできません. in_array 関数を使用してみましたが、役に立ちませんでした

誰か助けてください

<?php
$input = $_POST["txtNumberOfCards"];

$suit = array("Hearts", "Diamonds", "Clubs", "Spades");
$card = array("Ace","2", "3","4","5","6","7","8","9","10","Jack","Queen","King");

$randsuit = rand(0,3);
$randcard = rand(0,12);

for($x = 0; $x < $input; $x++){
echo ('<img src="Images/'.$card[$randcard].'of'.$suit[$randsuit].'.gif">');
}

?>
4

3 に答える 3

1

配列を使用して、どのカードが既に使用されているかを追跡し、それに応じて行動します。また、コードでは for ループの外に rand 関数がありました。つまり、乱数は 1 回しか生成されませんでした。

$input = $_POST["txtNumberOfCards"];;

$suit = array("Hearts", "Diamonds", "Clubs", "Spades");
$card = array("Ace","2", "3","4","5","6","7","8","9","10","Jack","Queen","King");

$setCards = array();
for($x = 0; $x < $input; $x++){
    $randsuit = rand(0,3);
    $randcard = rand(0,12); 
    if( isset($setCards[$suit[$randsuit].$card[$randcard]]) ) {
        $x--;
        continue;
    }
    echo ('<img src="Images/'.$card[$randcard].'of'.$suit[$randsuit].'.gif">');
    $setCards[$suit[$randsuit].$card[$randcard]] = true;
}

phpFiddle : fiddle が html をエコーアウトするので、レンダリングする代わりに表示できることに注意してください。

于 2013-10-05T20:29:46.573 に答える
0

重複したカードを取得する理由は、カードの組み合わせが既に配られているかどうかを確認していないためです。

最善の解決策は、カードの配列を構築し、それを使用してカードの組み合わせが作成されたかどうかを確認することです。次に、構築された配列をエコーし​​ます。

<?php
//The user input
$input = $_POST["txtNumberOfCards"];

$suit = array( "Hearts" , "Diamonds" , "Clubs" , "Spades" );
$card = array( "Ace" , "2" , "3" , "4" , "5" , "6" , "7" , "8" , "9" , "10" , "Jack" , "Queen" , "King");
//$dealArray holds the cards as they are dealt and used to compare what cards have all ready been dealt
$dealArray= array( );
//$count the while loop counter variable
$count = 0;
//while the $count variable is less then the $input
while( $count < $input )
{
  //generate a card combination array
  $cardCombo = array( 'suit' => $suit[ rand( 0 , 3 ) ],//Generate Random suit
                      'card' => $card[ rand( 0 , 12 ) ] );//Generate Random card

  //if the $cardCombo array that was generated is not in the $dealArray
  if ( !in_array( $cardCombo , $dealArray ) )
  {
    //Add the $cardCombo array to the end of the $dealArray
    array_push( $dealArray , $cardCombo );
    //Output an HTML image for the $cardCombo array
    echo ( '<img src="Images/' . $cardCombo['card'] . 'of' . $cardCombo['suit'] . '.gif">' );
    $count++;//Add 1 to the counter
  }
}
?>
于 2013-10-05T20:32:45.663 に答える
0

$input関数を使用して int 変数に変換する必要があります。intval()

また、ループのたびに変数ラベルをランダムに割り当てて、個別のカードを生成します。

<?php
$input = intval($_POST["txtNumberOfCards"]);

$suit = array("Hearts", "Diamonds", "Clubs", "Spades");
$card = array("Ace","2", "3","4","5","6","7","8","9","10","Jack","Queen","King");


for($x = 0; $x < $input; $x++){
$randsuit = rand(0,3);
$randcard = rand(0,12);
echo ('<img src="Images/'.$card[$randcard].'of'.$suit[$randsuit].'.gif">');
}

?>
于 2013-10-05T20:23:46.757 に答える