整数比较应直接用 >、

直接用 == 或 === 比较整数就行,但别在类型混杂时偷懒
PHP 中两个纯整型变量(比如 $a = 5;, $b = 10;)比较大小,最简单也最安全的方式就是用 >、、<code>>=、 这些关系运算符。它们专为数值设计,不搞类型转换,结果可预测。
常见错误现象:
有人习惯性用 == 判断大小(比如写 if ($a == $b) 当作“是否相等”,却误以为它能比大小),或者把字符串当整数传进来还硬用 >——这时候 PHP 会静默转成数字,"12abc" 变成 12,"abc12" 变成 0,结果容易偏移。
- 只在确认两边都是整型时,放心用
>、等 - 如果来源不确定(比如
$_GET['id']),先用filter_var($input, FILTER_VALIDATE_INT)校验,别靠运算符兜底 -
===不适用于大小比较,它只判断“值和类型都相等”,不能替代>
strcmp() 和 intcmp() 都不是整数比较的正路
strcmp() 是字符串比较函数,传整数进去会触发隐式转换,行为依赖 ASCII 值,strcmp(10, 2) 返回正数(因为 "10" 字典序大于 "2"),结果反直觉;而 intcmp() 并不存在——PHP 没这个内置函数,有人从其他语言记混了。
真实使用场景:需要自定义排序(比如 usort())时,才写比较函数,这时应明确返回 -1 / 0 / 1:
立即学习“PHP免费学习笔记(深入)”;
usort($arr, function($a, $b) {
return $a <=> $b; // PHP 7+ 的宇航员操作符,专为数值比较设计
});
- 别为了“看起来高级”用
strcmp()比整数,它不干这事 - 手写比较逻辑时,优先用
,它自动处理类型(同为整型时按数值,含字符串则转数字再比,仍比strcmp可靠) - 如果必须兼容老版本 PHP(return ($a > $b) ? 1 : (($a
注意 0、false、空字符串在松散比较中的陷阱
这不是整数比较本身的问题,但实际代码里常因条件判断混用导致 bug。比如 if ($count == false) 或 if (!$count),当 $count = 0(合法整数)时也会进分支,误判成“没数据”。
- 判断整数是否为零,写
$count === 0或$count == 0都可以,但别用!$count - 检查变量是否为有效非零整数,用
is_int($count) && $count !== 0 - 数据库取出来的
NULL或空字符串,经(int)强转后都变0,得先用isset()或is_numeric()卡住源头
性能上毫无压力,但别拿比较当类型校验用
整型比较是 CPU 级指令,几纳秒的事,不用考虑优化。真正拖慢的往往是前面没做输入过滤,导致后续一堆 is_int()、ctype_digit()、正则来回扫。
- 一次校验,多次使用:从外部拿到的值,尽早转成整型并验证,比如
$id = filter_var($_GET['id'], FILTER_VALIDATE_INT) ?: null; - 别在循环里反复调用
is_int()判断同一个变量 - 如果业务允许负数,注意
FILTER_VALIDATE_INT默认支持;若只接受正整数,加FILTER_FLAG_ALLOW_OCTAL之类没用,得自己加范围判断
整数比较本身很简单,难的是确保参与比较的确实是整数——那一步漏了,后面全白搭。











