如何正确解析PHP中的整数?

时间:2012-11-21 21:30:04

标签: php casting int

我可以使用intval,但根据文档:

  

字符串很可能会返回0,尽管这取决于   字符串最左边的字符。整数转换的通用规则   应用

...并且要解析的值可以是0,也就是说,我无法区分零和string

$value1 = '0';
$value2 = '15';
$value3 = 'foo'; // Should throw an exeption

真正的问题是:我如何解析字符串并区分投射到string的{​​{1}}和零本身?

2 个答案:

答案 0 :(得分:9)

在下面的代码中,$int_value如果null不是实际数字字符串(基数为10且为正),则会设置为$value,否则将设置为整数价值$value

$int_value = ctype_digit($value) ? intval($value) : null;
if ($int_value === null)
{
    // $value wasn't all numeric
}

答案 1 :(得分:0)

我没有针对ctype_digit()进行基准测试,但我认为以下是一个不错的选择。当然,这取决于您期望的确切行为。

function parseIntOrException($val) {
  $int = (int)$val;
  if ((string)$int === (string)$val) {
    throw \Exception('Nope.');
  }
  return $int;
}

http://3v4l.org/Tf8nh

1       1
'2'     2
'3.0'   false
4.0     4
5       5