Php 为什么将字符串转换为整数不起作用?

Php 为什么将字符串转换为整数不起作用?,php,casting,int,Php,Casting,Int,//编辑:最终目标是检测用户提交的值是字符串还是整数。因为该值是从表单输入中获得的,所以即使提供的值是整数,也会将其转换为字符串 我正在执行一个简单的比较,以检测字符串变量是否等于其整数值。该值是从HTML表单字段传递的 当字符串值为单个字母时,它的计算结果为true,而不应为true if ( ($val == (int)$val ) && strlen( $val ) == strlen( (int)$val ) ){ } 我还尝试使用intval()而不是强制转换int变

//编辑:最终目标是检测用户提交的值是字符串还是整数。因为该值是从表单输入中获得的,所以即使提供的值是整数,也会将其转换为字符串

我正在执行一个简单的比较,以检测字符串变量是否等于其整数值。该值是从HTML表单字段传递的

当字符串值为单个字母时,它的计算结果为true,而不应为true

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
}