假设我有一副牌,由如下数组表示。
$cards = [
"AS" => ["sort" => 14, "suite" => "S", "value" => 11],
"AC" => ["sort" => 14, "suite" => "C", "value" => 11],
"AD" => ["sort" => 14, "suite" => "D", "value" => 11],
"AH" => ["sort" => 14, "suite" => "H", "value" => 11],
"KS" => ["sort" => 13, "suite" => "S", "value" => 10],
"KC" => ["sort" => 13, "suite" => "C", "value" => 10],
"KD" => ["sort" => 13, "suite" => "D", "value" => 10],
"KH" => ["sort" => 13, "suite" => "H", "value" => 10],
"QS" => ["sort" => 12, "suite" => "S", "value" => 10],
"QC" => ["sort" => 12, "suite" => "C", "value" => 10],
"QD" => ["sort" => 12, "suite" => "D", "value" => 10],
"QH" => ["sort" => 12, "suite" => "H", "value" => 10],
"JS" => ["sort" => 11, "suite" => "S", "value" => 10],
"JC" => ["sort" => 11, "suite" => "C", "value" => 10],
"JD" => ["sort" => 11, "suite" => "D", "value" => 10],
"JH" => ["sort" => 11, "suite" => "H", "value" => 10],
"10S" => ["sort" => 10, "suite" => "S", "value" => 10],
"10C" => ["sort" => 10, "suite" => "C", "value" => 10],
"10D" => ["sort" => 10, "suite" => "D", "value" => 10],
"10H" => ["sort" => 10, "suite" => "H", "value" => 10],
"9S" => ["sort" => 9, "suite" => "S", "value" => 9],
"9C" => ["sort" => 9, "suite" => "C", "value" => 9],
"9D" => ["sort" => 9, "suite" => "D", "value" => 9],
"9H" => ["sort" => 9, "suite" => "H", "value" => 9],
"8S" => ["sort" => 8, "suite" => "S", "value" => 8],
"8C" => ["sort" => 8, "suite" => "C", "value" => 8],
"8D" => ["sort" => 8, "suite" => "D", "value" => 8],
"8H" => ["sort" => 8, "suite" => "H", "value" => 8],
"7S" => ["sort" => 7, "suite" => "S", "value" => 7],
"7C" => ["sort" => 7, "suite" => "C", "value" => 7],
"7D" => ["sort" => 7, "suite" => "D", "value" => 7],
"7H" => ["sort" => 7, "suite" => "H", "value" => 7],
"6S" => ["sort" => 6, "suite" => "S", "value" => 6],
"6C" => ["sort" => 6, "suite" => "C", "value" => 6],
"6D" => ["sort" => 6, "suite" => "D", "value" => 6],
"6H" => ["sort" => 6, "suite" => "H", "value" => 6],
"5S" => ["sort" => 5, "suite" => "S", "value" => 5],
"5C" => ["sort" => 5, "suite" => "C", "value" => 5],
"5D" => ["sort" => 5, "suite" => "D", "value" => 5],
"5H" => ["sort" => 5, "suite" => "H", "value" => 5],
"4S" => ["sort" => 4, "suite" => "S", "value" => 4],
"4C" => ["sort" => 4, "suite" => "C", "value" => 4],
"4D" => ["sort" => 4, "suite" => "D", "value" => 4],
"4H" => ["sort" => 4, "suite" => "H", "value" => 4],
"3S" => ["sort" => 3, "suite" => "S", "value" => 3],
"3C" => ["sort" => 3, "suite" => "C", "value" => 3],
"3D" => ["sort" => 3, "suite" => "D", "value" => 3],
"3H" => ["sort" => 3, "suite" => "H", "value" => 3],
"2S" => ["sort" => 2, "suite" => "S", "value" => 2],
"2C" => ["sort" => 2, "suite" => "C", "value" => 2],
"2D" => ["sort" => 2, "suite" => "D", "value" => 2],
"2H" => ["sort" => 2, "suite" => "H", "value" => 2],
];
我希望能够对任意数量的牌进行排序,以便根据排序顺序直接找到获胜的牌。我试着使用这样的函数。
function sortCardsBySortOrder(Array $cards, $reverse = false): Array {
uasort($cards, function($a, $b) use($reverse) {
$result = $a['sort'] <=> $b['sort'];
if (!$reverse) {
$result *= -1;
}
if ($result == 0) {
$result = $a['suite'] <=> $b['suite'];
}
return $result;
});
return $cards;
}
从那里,我可以很容易地发现,如果卡是连续的,从而构成一个直在扑克。
然而,问题在于Ace,因为它可以是高的也可以是低的。我怎样才能在不改变方向的情况下检测到直线
sort
数组中的字段?或者,如果我需要完全改变它,我将如何做,而不影响这样一个事实,即当我重新排列整个牌组时,牌仍然需要被排序为Ace high?
A, 2, 3, 4, 5
王牌
可以是1或11,具体取决于最适合的位置。所以在手上
A, K, Q, J, 10
王牌很高。这些都是直道,但会影响Ace的排序字段。处理这类问题的最佳方法是什么?