php实现顺子
PHP实现顺子判断的方法
顺子是指一组连续的数字或字母,在扑克牌中通常指五张连续的牌。以下是几种PHP实现顺子判断的方法。
方法一:基本数组排序与遍历
将输入的数组排序后检查是否连续。假设输入是一个包含五个数字的数组:
function isShunzi($numbers) {
sort($numbers);
for ($i = 1; $i < count($numbers); $i++) {
if ($numbers[$i] != $numbers[$i - 1] + 1) {
return false;
}
}
return true;
}
方法二:处理包含A的特殊情况
在扑克牌中,A可以当作1或14使用。以下是处理这种情况的代码:
function isShunziWithAce($numbers) {
sort($numbers);
$hasAce = in_array(1, $numbers) && in_array(14, $numbers);
if ($hasAce) {
$numbers = array_diff($numbers, [14]);
array_unshift($numbers, 1);
}
for ($i = 1; $i < count($numbers); $i++) {
if ($numbers[$i] != $numbers[$i - 1] + 1) {
return false;
}
}
return true;
}
方法三:使用范围比较
通过比较数组与生成的连续数字范围来判断:
function isShunziByRange($numbers) {
sort($numbers);
$min = min($numbers);
$range = range($min, $min + count($numbers) - 1);
return $numbers == $range;
}
方法四:处理重复值的情况
如果数组中可能包含重复值,需要先去除重复:
function isShunziNoDuplicates($numbers) {
$unique = array_unique($numbers);
if (count($unique) != count($numbers)) {
return false;
}
sort($unique);
for ($i = 1; $i < count($unique); $i++) {
if ($unique[$i] != $unique[$i - 1] + 1) {
return false;
}
}
return true;
}
方法五:优化性能的版本
对于大数据量,可以使用更高效的方法:

function isShunziOptimized($numbers) {
$min = min($numbers);
$max = max($numbers);
return ($max - $min == count($numbers) - 1) && count(array_unique($numbers)) == count($numbers);
}
以上方法可以根据具体需求选择使用。第一种方法适用于简单的连续数字判断,后面的方法处理了更复杂的情况如Ace和重复值。






