我需要将字符串转换为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
答案 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)