如何将字符串转换为整数,但区分" foo"来自" 0"?

时间:2018-06-05 11:41:11

标签: php

我需要将字符串转换为intiger,但区分"foo""0",因为intval() php函数会将非数字值转换为0

输入:

$a = "10"
$b = "foo"
$c = "0"
$d = "10.5"

我希望在转换之后:

$a == 10
$b == "foo" // or false or whatever that is not an integer
$c == 0
$d == 10.5

3 个答案:

答案 0 :(得分:2)

您可以随时使用is_numeric()

if (is_numeric($value)) {
    $integer = (int) $value; // Or use intval()
    $floatOrInteger = $value + 0; // Can also give a float, so watch it.
} else {
    echo "Value is not numeric!";
}

请参阅此处的代码:https://3v4l.org/j4Utb

修改

如果您想要更精细的控制,请查看我链接的文档的注释。那里有很多非常有用的技巧。

答案 1 :(得分:2)

您可以考虑使用条件运算符,代码如下所示:

$foo = is_numeric($bar) ? (float) $bar : $bar;

没有理由推翻这个解决方案,这应该足够了。

答案 2 :(得分:0)

如果它真的是整数,你可以使用is_int进行测试。在那之后,你必须确定它是否是一个浮点数。在您的情况下,像(int) $value == (float) $value这样的简单检查就足够了。

在函数中包装内容可能如下所示:

function toNumber($value) {
    if (is_numeric($value)) {
        if ((int)$value != (float)$value) {
            return (float) $value;
        }
        return (int) $value;
    }
    return $value;
}

您的示例(以及其他一些示例)的结果将是

var_dump(toNumber('10')) . "\n";
var_dump(toNumber('foo')) . "\n";
var_dump(toNumber('0')) . "\n";
var_dump(toNumber(10.5)) . "\n";
var_dump(toNumber('-10')) . "\n";
var_dump(toNumber('')) . "\n";
var_dump(toNumber('10.0')) . "\n";

int(10)
string(3) "foo"
int(0)
float(10.5)
int(-10)
string(0) ""
int(10)