実現したいこと
ここに実現したいことを箇条書きで書いてください。
- [ ]PHP ポーカーの役を判断するアルゴリズム
前提
課題に行き詰まっていて質問です
ポーカーの役を出力するアルゴリズムにジョーカーの要素を加えてからうまくいきません
発生している問題・エラーメッセージ
役と出力が合わない ジョーカーを加えた処理がわからない
該当のソースコード
php コード <?php function judge($cards) { $cover = array_unique($cards, SORT_REGULAR); $unique = count($cover); foreach ($cards as $card) { if ($card['number'] > 13 || $card['number'] < 0) { return "手札が不正"; } elseif (!in_array($card['suit'], ['heart', 'spade', 'diamond', 'club', 'joker'])) { return "手札が不正"; } elseif ($unique < 5) { return "手札が不正"; } elseif ($card['suit'] == "joker" && $card['number'] != 0) { return '手札が不正'; } elseif ($card['suit'] != 'joker' && $card['number'] == 0) { return "手札が不正"; } } $sortNum = array_column($cards, 'number'); sort($sortNum); $royal = [1, 10, 11, 12, 13]; $suit_array = array_column($cards, 'suit'); $min = $sortNum[0]; $rangeNum = range($min, $min + 4); $countNum = array_count_values($sortNum); $j_check = in_array('joker', $suit_array); if ($j_check) { if (in_array(4, $countNum)) { return "役はファイブカード"; } elseif (in_array(1, $sortNum) && end($sortNum) == 13 && count(array_unique($sortNum)) == 4) { return "役はロイヤルストレートフラッシュ"; } elseif ($sortNum == $rangeNum || in_array($min + 4, $sortNum)) { return "役はストレート"; } elseif (count(array_unique($suit_array)) == 2) { return "役はフラッシュ"; } elseif (in_array(3, $countNum) && in_array(1, $countNum)) { return "役はフォーカード"; } elseif (in_array(3, $countNum) && in_array(2, $countNum)) { return "役はフルハウス"; } elseif (in_array(3, $countNum)) { return "役はスリーカード"; } elseif (count(array_unique($countNum)) == 2 && in_array(2, $countNum)) { return "役はツーペア"; } elseif (in_array(2, $countNum)) { return "役はワンペア"; } } else { // ジョーカーがない場合の役判定を以下に書きます if ($sortNum == $royal && count(array_unique($suit_array)) == 1) { return "役はロイヤルストレートフラッシュ"; } elseif ($sortNum == $rangeNum && count(array_unique($suit_array)) == 1) { return "役はストレートフラッシュ"; } elseif (in_array(4, $countNum)) { return "役はフォーカード"; } elseif (in_array(3, $countNum) && in_array(2, $countNum)) { return "役はフルハウス"; } elseif (count(array_unique($suit_array)) == 1) { return "役はフラッシュ"; } elseif ($sortNum == $rangeNum) { return "役はストレート"; } elseif (in_array(3, $countNum)) { return "役はスリーカード"; } elseif (count(array_unique($countNum)) == 2 && in_array(2, $countNum)) { return "役はツーペア"; } elseif (in_array(2, $countNum)) { return "役はワンペア"; } else { return "役はなし"; } } } ?> <!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <title>ポーカー役判定(ジョーカーあり)</title> </head> <body> <section> <p>手札は</p> <p><?php foreach ($cards as $card) : ?><?= $card['suit'] . $card['number'] ?><?php endforeach; ?></p> <p><?= judge($cards) ?>です。</p> </section> </body> </html> ### 試したこと Chat Gptに投げたがダメだった ### 補足情報(FW/ツールのバージョンなど) Vs code
$cards = [
['suit' => 'heart', 'number' => 12],
['suit' => 'heart', 'number' => 1],
['suit' => 'heart', 'number' => 13],
['suit' => 'heart', 'number' => 11],
['suit' => 'heart', 'number' => 10],
]; // ロイヤルストレートフラッシュ
// $cards = [
// ['suit'=>'heart', 'number'=>2],
// ['suit'=>'heart', 'number'=>3],
// ['suit'=>'heart', 'number'=>4],
// ['suit'=>'heart', 'number'=>5],
// ['suit'=>'heart', 'number'=>6],
// ]; // ストレートフラッシュ
// $cards = [
// ['suit'=>'heart', 'number'=>2],
// ['suit'=>'heart', 'number'=>3],
// ['suit'=>'heart', 'number'=>4],
// ['suit'=>'heart', 'number'=>5],
// ['suit'=>'spade', 'number'=>6],
// ]; // ストレート
// $cards = [
// ['suit'=>'heart', 'number'=>2],
// ['suit'=>'heart', 'number'=>3],
// ['suit'=>'heart', 'number'=>4],
// ['suit'=>'heart', 'number'=>5],
// ['suit'=>'heart', 'number'=>7],
// ]; // フラッシュ
// $cards = [
// ['suit'=>'heart', 'number'=>2],
// ['suit'=>'spade', 'number'=>2],
// ['suit'=>'diamond', 'number'=>2],
// ['suit'=>'club', 'number'=>2],
// ['suit'=>'heart', 'number'=>7],
// ]; // フォーカード
// $cards = [
// ['suit'=>'heart', 'number'=>2],
// ['suit'=>'spade', 'number'=>2],
// ['suit'=>'diamond', 'number'=>2],
// ['suit'=>'club', 'number'=>7],
// ['suit'=>'heart', 'number'=>7],
// ]; // フルハウス
// $cards = [
// ['suit'=>'heart', 'number'=>2],
// ['suit'=>'spade', 'number'=>2],
// ['suit'=>'diamond', 'number'=>2],
// ['suit'=>'club', 'number'=>7],
// ['suit'=>'heart', 'number'=>8],
// ]; // スリーカード
// $cards = [
// ['suit'=>'heart', 'number'=>2],
// ['suit'=>'spade', 'number'=>2],
// ['suit'=>'diamond', 'number'=>7],
// ['suit'=>'club', 'number'=>7],
// ['suit'=>'heart', 'number'=>8],
// ]; // ツーペア
// $cards = [
// ['suit'=>'heart', 'number'=>2],
// ['suit'=>'spade', 'number'=>2],
// ['suit'=>'diamond', 'number'=>7],
// ['suit'=>'club', 'number'=>8],
// ['suit'=>'heart', 'number'=>9],
// ]; // ワンペア
// $cards = [
// ['suit'=>'heart', 'number'=>2],
// ['suit'=>'spade', 'number'=>3],
// ['suit'=>'diamond', 'number'=>7],
// ['suit'=>'club', 'number'=>8],
// ['suit'=>'heart', 'number'=>9],
// ]; // 役はなしです
