php判断奇偶最常用取模运算符%:$n % 2 === 0为偶数,=== 1为奇数;位运算$n & 1更高效且兼容负数;务必先用filter_var校验整型,再判断,避免类型隐式转换导致逻辑错误。

用 % 取模运算符最直接
PHP 判断奇偶,本质是看整数除以 2 的余数。余数为 0 是偶数,为 1 是奇数。最常用、最可靠的方式就是用取模运算符 %。
注意:必须确保变量是整型或能安全转为整型的数字,否则结果可能出人意料。
-
$n % 2 === 0→ 偶数(严格比较,避免false或0混淆) -
$n % 2 === 1→ 奇数(同理,不用==,防类型隐式转换) - 负数也适用:
-3 % 2在 PHP 中结果是-1,所以得用abs($n) % 2 === 1或更稳妥的$n & 1(见下一条)
用位运算 & 更快且兼容负数
对整数做按位与 & 1,本质是看二进制最低位:为 0 是偶数,为 1 是奇数。它不依赖符号,天然支持负数,且比 % 略快(尤其在密集循环中)。
-
$n & 1 === 0→ 偶数 -
$n & 1 === 1→ 奇数 - 只适用于整型。如果
$n是字符串如"5",PHP 会尝试转成整数;但"5abc"会转成5,而"abc"会转成0(即判为偶数),这容易埋坑 - 浮点数如
5.0会被截断为5,但5.7也会变5—— 所以务必先确认数据类型
别用 is_int() 或 filter_var() 直接判断奇偶
这两个函数不是为奇偶设计的,强行套用反而绕路、易错。
立即学习“PHP免费学习笔记(深入)”;
-
is_int($n)只回答“是不是整型”,不涉及值的奇偶性 -
filter_var($n, FILTER_VALIDATE_INT)仅校验是否合法整数字符串,返回的是整数值或false,仍需后续用%或& - 常见错误:把用户输入直接丢给
%,比如$_GET['id']是字符串"3"—— PHP 虽能自动转,但若传入"3.5"或"3abc",%会静默转成3,逻辑就偏了
实际写法建议:先过滤再判断
线上代码不能赌输入质量。稳妥做法是先确保拿到干净整数,再奇偶判断。
- 用
filter_var($input, FILTER_VALIDATE_INT)获取整数,失败返回false,别硬转 - 或者用
(int)$input强转后,再用is_int()验证是否真的转成功(注意:(int)"123abc"得123,但is_int(123)是true,所以还得结合原始值判断) - 示例:
$n = filter_var($_GET['num'] ?? '', FILTER_VALIDATE_INT); if ($n !== false) { $is_odd = $n & 1; }
真正麻烦的从来不是 % 2 这一行代码,而是你没看见的那个空格、那个科学计数法字符串、那个前端悄悄塞进来的 Unicode 字符——它们会让 $n 看似是数,实则早已失控。











