仅当字符串是整数时才将字符串转换为整数

时间:2014-08-05 19:02:31

标签: php types casting

$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

4 个答案:

答案 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;
}

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

答案 3 :(得分:0)

您可以使用is_numeric来确定传递的值是数字还是通过返回 true 可以转换为数字,否则返回 false

$value = "32 is numeric";
if (is_numeric(trim($value))) {
$value = (double) $value; 
echo "numeric";
}
echo $value;