[英]Cast a string to an integer only if it is an integer
$value = "32 is my number";
if ($value == (integer) $value) {
$value = (integer) $value;
}
echo $value; // always 32
我了解为什么这行不通 。 仅当字符串实际上只是整数时,才将其转换为整数吗?
这行得通,但是太丑陋了。 似乎应该有一个更好的方法:
$value = "32 is my number";
$new_value = $value;
$new_value = (integer) $new_value ;
$new_value = (string) $new_value;
if ($value == $new_value) {
$value = (integer) $value;;
}
为了澄清:“ 32是我的数字”应保留为字符串,“ 32”应转换为整数,“ 32.01”不应更改。 它是数字,但(整数)“ 32.01”变为32
不知道为什么要这样做,但这可以做到:
if(ctype_digit($value)) {
$value = (int)$value;
}
编辑:从您的问题尚不清楚,您是否认为32 is my number
应该是整数还是不是:-(
当您使用==
比较运算符时,PHP确实会输入杂耍 。 这导致$value
在与(integer) $value
相比较之前先转换为整数,从而使它们相同。
$value = "32 is my number";
if ($value === (integer) $value) { // $value is type juggled to 32 and then compared
$value = (integer) $value;
}
echo $value;
使用===
比较运算符,该运算符按值和类型进行比较,以避免出现这种情况:
$value = "32 is my number";
if ($value === (integer) $value) { // $value is still "32 is my number"
$value = (integer) $value;
}
echo $value;
从其他答案中,您可以看到执行此操作的多种方法。 您还可以考虑使用filter_var()
作为另一种选择。
$value = "32 is my number";
if (filter_var($value, FILTER_VALIDATE_INT)) {
$value = (integer) $value;
}
echo $value;
有一个叫做is_numeric()
的函数。 它测试字符串是否仅包含数字。 我认为这正是您所需要的。
if (is_numeric($value)) {
$value = (integer) $value;
}
您可以使用is_numeric
来确定传递的值是数字,还是返回字符串为true的字符串(如果返回),则可以转换为数字,否则返回false 。
$value = "32 is numeric";
if (is_numeric(trim($value))) {
$value = (double) $value;
echo "numeric";
}
echo $value;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.