这对我来说听起来很奇怪:

$test_1 = 'string';
$test_2 = '0';

var_dump(intval($test_1)); // Output: int 0
var_dump(intval($test_2)); // Output: int 0

$can_cast = intval($test_2) ? 'sure' : 'nope'; // Wrong!!!


因此,使用stringint的转换,intval返回0。很好,但是当字符串实际上可以强制转换为零(因为为零)时也返回0。

如何区分两者(允许“ 0”作为字符串和拒绝“字符串”)?

编辑:好的,让我说我知道我可以使用is_numericBut is_numeric('2.3')返回true,所以它无济于事。和:

$test = '0';
var_dump(is_numeric($test) && intval($test)); // Fail!!!

最佳答案

您可以在进行强制转换之前进行ctype_digit检查(如果您只想要正数)。或者,您可以使用filter_varFILTER_VALIDATE_INT进行整数验证。整数验证还将检查整数语义,即它将确保整数在允许的范围内。您还可以通过几个选项自定义它。

关于php - PHP intval()行为?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8554050/

10-11 01:18