繁体   English   中英

仅将字符串转换为整数

[英]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;
}

http://php.net/manual/de/function.is-numeric.php

您可以使用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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM