Php 为什么将字符串转换为整数不起作用?
//编辑:最终目标是检测用户提交的值是字符串还是整数。因为该值是从表单输入中获得的,所以即使提供的值是整数,也会将其转换为字符串 我正在执行一个简单的比较,以检测字符串变量是否等于其整数值。该值是从HTML表单字段传递的 当字符串值为单个字母时,它的计算结果为true,而不应为truePhp 为什么将字符串转换为整数不起作用?,php,casting,int,Php,Casting,Int,//编辑:最终目标是检测用户提交的值是字符串还是整数。因为该值是从表单输入中获得的,所以即使提供的值是整数,也会将其转换为字符串 我正在执行一个简单的比较,以检测字符串变量是否等于其整数值。该值是从HTML表单字段传递的 当字符串值为单个字母时,它的计算结果为true,而不应为true if ( ($val == (int)$val ) && strlen( $val ) == strlen( (int)$val ) ){ } 我还尝试使用intval()而不是强制转换int变
if ( ($val == (int)$val ) && strlen( $val ) == strlen( (int)$val ) ){
}
我还尝试使用intval()
而不是强制转换int变量类型
它总是被认为是真实的。但是r
不==0
,这怎么可能呢
$val = 'r';
echo 'Does $val = (int)$val? ' . ($val == (int)$val);
echo '<br/><br/>';
echo '$val was: ' . $val . '<br/>';
echo '(int)$val was: ' . (int)$val;
要检查字符串是否实际上是一个数字,我将使用如下内容:
if (strval(intval($val, 10)) == $val)
注意:这将只检测带有整数的字符串,还有一个适用于十进制和指数的is_numeric
(如+0123.45e6
)
注2:is_int
检测变量的实际类型,因此对于“123”
它将返回false,因为它是字符串
注3:当数字以
+
前缀提交时,您可能会遇到问题,比如+123
——您是否支持这种情况取决于您自己,检查字符串是否实际上是一个数字(根据您的注释,这是您想要的),您不必进行一些自定义测试。PHP为此提供了一个内置函数:
if(is_numeric($val)) {
//do integer stuff
} else {
//do string stuff
}
当您与
==
比较时,会隐式转换值。它与(int)$val==(int)$val
相同。问题是:你到底想用你的代码实现什么?@franzgleichman谢谢你。用户可以传递记录ID(整数)或名称(字符串)。我根据它是整数(user\u id=$val
)还是字符串(user\u name
如“%val%”)来构建MySQL查询是的,不应该($val==(int)$val)
是($val=(int)$val)
?或者你想在这里使用三元运算符?我在搜索字符串或ID条目时使用if(is_numeric($searchval))
。@patrickmore用于此。当有内置函数is_numeric()
时,为什么要重新发明轮子?@franzgleichman因为is_numeric也可以检测十进制数和指数数,但这里我们只需要整数(如果我得到了正确的OP)@IncredibleHat,因为is_int检测变量的类型,所以对于“123”,它将返回false,因为类型是string,而不是int
if(is_numeric($val)) {
//do integer stuff
} else {
//do string stuff
}