PHP中字符串類型與數值類型混合計算

字符串轉數值的規則

當一個字符串被當作一個數值來取值,其結果和類型如下:

如果該字符串沒有包含 ‘.’,’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

參考

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章