$value = "32 is my number";
if ($value == (integer) $value) {
$value = (integer) $value;
}
echo $value; // always 32
我理解why this does not work。如果字符串实际上只是一个整数,我如何将字符串转换为整数?
这有效,但它太难看了。似乎应该有更好的方法:
$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
答案 0 :(得分:0)
不知道为什么要这样做,但这样做会:
if(ctype_digit($value)) {
$value = (int)$value;
}
编辑:您的问题不清楚您是否认为32 is my number
应该是整数: - (
答案 1 :(得分:0)
使用==
比较运算符时,PHP会type juggling。这会导致$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;
答案 2 :(得分:0)
有一个名为is_numeric()
的函数。它测试一个字符串是否只包含数字。我认为这正是你所需要的。
if (is_numeric($value)) {
$value = (integer) $value;
}
答案 3 :(得分:0)
您可以使用is_numeric
来确定传递的值是数字还是通过返回 true 可以转换为数字,否则返回 false
$value = "32 is numeric";
if (is_numeric(trim($value))) {
$value = (double) $value;
echo "numeric";
}
echo $value;