Php 带in_数组的随机错误

Php 带in_数组的随机错误,php,c++,arrays,Php,C++,Arrays,所以,我的一位同事向我提出了挑战,要求我建立一个随机扑克手生成器。当时,我只有我的手机,可以用它运行php。 因此,经过一些修补和大量搜索,我得出了以下结论: <?php $cards; $card = array(); function GetCard($getSuit, $getNumber){ for($s=0; $s < 4; $s++){ for($n=0; $n < 13; $n++){

所以,我的一位同事向我提出了挑战,要求我建立一个随机扑克手生成器。当时,我只有我的手机,可以用它运行php。 因此,经过一些修补和大量搜索,我得出了以下结论:

<?php
   $cards;
   $card = array();
   function GetCard($getSuit, $getNumber){
    for($s=0; $s < 4; $s++){
          for($n=0; $n < 13; $n++){

                if($s == 0){
        //Clubs
                    $suits[$s] = "-C";
                } else if($s == 1){
        //Hearts
                    $suits[$s] = "-H";
                } else if($s == 2){
        //Spades
                    $suits[$s] = "-S";
                } else if($s == 3){
        //Diamonds
                    $suits[$s] = "-D";
                }
                if($n == 0){
                  $num[$n] = "A";
                } else if($n == 10){
                  $num[$n] = "J";
                } else if($n == 11){
                  $num[$n] = "Q";
                } else if($n == 12){
                  $num[$n] = "K";
                } else {
                  $num[$n] = $n+1;
                }
                $cards[$s][$n] = $num[$n].$suits[$s];
          }
        }
        return $cards[$getSuit][$getNumber];
    }
    function GetRandomPokerHand(){
        $i = 0;
        while($i < 5){ 
                mt_srand();
        $rs = mt_rand(0,3);
        $rn = mt_rand(0,12);
        $randomCard = GetCard($rs,$rn);
        if(!in_array($randomCard,$card)){
            $card[i] = GetCard($rs,$rn);
            echo $card[i];
            echo " ";
            $i++;
        }else{
            echo " found ";
        }
    }
   }
        GetRandomPokerHand();
?>

我得到了手,但是。。。每隔一段时间,in_阵列就会失败,我会得到两张相同的卡。我在“else”语句中添加了“find”,以查看它是否找到了副本。它确实这样做了,并发出“发现”的回声,偶尔还会显示一个副本

因此,当我带着c++回家时,我决定尝试同样的代码(大致相同):(使用“switch”而不是“if”是因为偏好,而switch语句在手机上太麻烦了)

#包括
#包括
#包括
#包括
使用名称空间std;
弦乐服[4];
字符串num[13];
串卡[4][13];
字符串GetCard(int-getSuit,int-getNumber){
对于(int s=0;s<4;s++){
对于(int n=0;n<13;n++){
开关{
案例0:
诉讼[s]=“-C”;
打破
案例1:
套装[s]=“-H”;
打破
案例2:
适合[s]=“-s”;
打破
案例3:
西服[s]=“-D”;
打破
}
开关(n){
案例0:
num[n]=“A”;
打破
案例10:
num[n]=“J”;
打破
案例11:
num[n]=“Q”;
打破
案例12:
num[n]=“K”;
打破
违约:
num[n]=to_字符串(n+1);
打破
}
卡片[s][n]=数量[n]+套装[s];
}
}
字符串卡片={cards[getSuit][getNumber]};
回程卡;
}
布尔数组(常量字符串和值、常量向量和数组){
返回find(array.begin(),array.end(),value)!=array.end();
}
void GetRanddomPokerHand(){
int hand=0;
srand(时间(空));
同时(手<5){
int suit=rand()%4;
int value=rand()%13;
字符串randomCard=GetCard(套装、价值);
向量卡={“”、“”、“”、“”、“”};
if(!in_数组(随机卡,卡)){
卡片[手]=随机卡片;

在C++中,你的循环中有这条线

vector<string> card = { "", "", "", "", "" };
vector card={“”、“”、“”、“”、“”、“”};

这是每次创建一个新的空白指针,所以它永远不会有重复。

C++中的一个,你的循环内有这个行

vector<string> card = { "", "", "", "", "" };
vector card={“”、“”、“”、“”、“”、“”};

这意味着每次都会创建一个新的空白手,因此它永远不会有重复的手。

$card[i]需要是$card[$i]


您的$card数组始终只有一个元素,这是导致该错误的最后一张卡;)

$card[i]必须是$card[$i]


您的$card数组始终只有一个元素,这是导致该错误的最后一张卡;)

ACK!这就是您不应该使用迷你键盘(手机)编程的原因。谢谢,这修复了itACK!这就是您不应该使用迷你键盘(手机)编程的原因。谢谢,这修复了它