字符串轉數值的規則
當一個字符串被當作一個數值來取值,其結果和類型如下:
如果該字符串沒有包含 ‘.’,’e’ 或 ‘E’ 並且其數字值在整型的範圍之內(由 PHP_INT_MAX 所定義),該字符串將被當成 integer 來取值。其它所有情況下都被作爲 float 來取值。
該字符串的開始部分決定了它的值。如果該字符串以合法的數值開始,則使用該數值。否則其值爲 0(零)。合法數值由可選的正負號,後面跟着一個或多個數字(可能有小數點),再跟着可選的指數部分。指數部分由 ‘e’ 或 ‘E’ 後面跟着一個或多個數字構成。
如下會被轉成整數:
[+/-][0-9][*]
如下會被轉成浮點型數:
[+/-][0-9][.][0-9][e/E][0-9][*]
示例
$r = '123' + 1;
var_dump($r);
// 輸出結果 int(124)
$r = '123.4' + 1;
var_dump($r);
// 輸出結果 float(124.4)
$r = '1.5e4' + 1;
var_dump($r);
// 輸出結果 float(15001)
$r = '123456789123456789' + 1;
var_dump($r);
// 輸出結果 float(1.2345678912346E+17)
$r = '123abc' + 1;
var_dump($r);
// 輸出結果 int(124)
$r = '123e1abc' + 1;
var_dump($r);
// 輸出結果 float(1231)
$r = '123.abc' + 1;
var_dump($r);
//輸出結果 float(124)
$r = '+123abc' + 1;
var_dump($r);
// 輸出結果 int(124)
$r = '-123abc' + 1;
var_dump($r);
// 輸出結果 int(-122)
$r = 'abc' + 1;
var_dump($r);
// 輸出結果 int(1)
更好的方式
已經確定需要的是整數(浮點數),則可以使用intval()
(floatval()
)先將字符串轉換成整數(浮點數),然後再與其他數值進行計算。
判斷字符串是否爲整數
HTTP GET/POST提交的數據,可以通過該方式進行校驗。
$str = '123';
$r = ''.intval($str) == $str; //需要將字符串轉成整形然後再變回去,再和原字符串做比較
var_dump($r);
// 輸出結果 true
$str = '123abc';
$r = ''.intval($str) == $str;
var_dump($r);
// 輸出結果 false