前提
多次元配列の中に数字や文字があり、それぞれが重複しているか調べるプログラムを書いているのですが、なかなか上手くいきません。
ポーカーのアルゴリズムが課題として上がっており、上記の通りに配列に同じ数字があればワンペア、二枚あればツーペアなどと表記するため、多次元配列から数字や文字を比べると思うのですが、二日悩んでも回答が見出せないので質問されていただきます。
実現したいこと
多次元配列の中の重複している要素を比較したい。
現在書いているコード
エラーメッセージ
該当のソースコード
php
1// 手札 2$cards = [ 3 ['suit'=>'heart', 'number'=>12], 4 ['suit'=>'heart', 'number'=>1], 5 ['suit'=>'heart', 'number'=>13], 6 ['suit'=>'heart', 'number'=>11], 7 ['suit'=>'heart', 'number'=>10], 8]; 9 10 // カードの並び替え 11$numbers = array_column($cards,'number'); 12array_multisort($numbers, SORT_ASC, $cards); 13 14function judge($cards) { 15 // この関数内に処理を記述 16 foreach($cards as ['suit' => $suit,'number' => $number]){ //cardsの中をそれぞれ取り出す。 17 18 // カードの不正チェック 19 if(!in_array($suit,['heart', 'spade', 'diamond', 'club']) || $number < 1 || $number > 13){ 20 echo '不正'; 21 break; 22 } 23 24 // 役判定 25 ここに書くプログラムで悩んでいます。
試したこと
$numbers_list = array_count_values($cards);
foreach($cards as ['suit' => $suit,'number' => $number]){ $numbers_list = array_count_values($cards); }
$numbers_list = array_count_values($number);
$numbers_list = array_count_values(['suit' => $suit,'number' => $number]);
上記のプログラムを記入してみましたがどれも上手くいきませんでした。
約判定にはif文で「〜と〜が同じであればワンペア」という記載をしたいのですが、重複する数字や記号を取り出すことに苦戦しております。
補足情報
あくまでとっかかりが欲しいといった状態なので、詳しすぎる回答は求めていません。
ただこの関数(array_count_values)を使用して、重複している要素を比べる事は可能なのか?
別の関数を使った方がいいのかなどは聞きたいのですが、自分で調べて理解したいです。
わがままで申し訳ありませんが、皆さんの力をお貸しいただければと思います。

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/08/14 16:53
退会済みユーザー
2022/08/15 12:55