实现三带一,三带二,四带二,顺子,王炸功能逻辑
代码:
classCardValidator{// 逻辑publicfunctioncheckPokerType($cards){$counts=array_count_values($cards);sort($cards);$isStraight=true;$isStraightFlush=true;$isFourOfAKind=false;$isFullHouse=false;$isThreeOfAKind=false;$isTwoPairs=false;$isOnePair=false;$isHighCard=true;// 顺子判断for($i=1;$i<count($cards);$i++){if($cards[$i]!=$cards[$i-1]+1){$isStraight=false;break;}}if(count($cards)==2&&in_array('小王',$cards)&&in_array('大王',$cards)){return"王炸";}// 四带二和王炸判断if(count($counts)==2){$values=array_values($counts);if(in_array(4,$values)&&in_array(2,$values)){return"四带二";}}// 三带一/三带二判断if(count($counts)==3){$values=array_values($counts);if(in_array(3,$values)){if(in_array(1,$values)){return"三带一";}elseif(in_array(2,$values)){return"三带二";}}}// 其他牌型判断if(count($counts)==4){$values=array_values($counts);if(in_array(2,$values)&&in_array(2,$values)){$isTwoPairs=true;}elseif(in_array(2,$values)){$isOnePair=true;}}if($isStraight){return"顺子";}return"牌选择错误";}}// 测试$cards0=['大王','小王'];// 王炸$cards1=[3,3,3,4,5];// 三带一$cards2=[3,3,3,4,4];// 三带二$cards3=[3,3,3,3,5,5];// 四带二$cards4=[3,4,5,6,7];// 顺子$card=newCardValidator();echocard->checkPokerType($cards0)."\n";// 输出:王炸echocard->checkPokerType($cards1)."\n";// 输出:三带一echocard->checkPokerType($cards2)."\n";// 输出:三带二echocard->checkPokerType($cards3)."\n";// 输出:四带二echocard->checkPokerType($cards4)."\n";// 输出:顺子