當一個字串被當作一個數值來取值,其結果和類型如下:
如果該字串沒有包含 ‘.’,’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())先將字串轉換成整數(浮點數),然後再與其他數值進行計算。
一。PHP中數值型字串相加
1.若兩個字串開頭沒有有效數值或不是數值型字串,這兩個字串相加時都看成0;
$a="abc";$b="b01";$a+$b是0
2.兩個數值型字串相加時,有效數字進行相加。
$a="100";$b="01a";$a+$b=101;
3/如果字串中帶有‘.’,'e','E'時,按float型數文書處理。
$a="100";$b="12.6a";$a+$b=112.6;
$a='10';$b='12.3e3';$a+$b同樣為float型float(12310)
二.php中兩個字串相比較(< > ==);
1.php中兩個字串比較是否相等,一般不用(==),因為(==)會改變原有資料類型,而是用strcmp(str1,str2)系列函數strcmp($str1,$str2);(strcmp是強制轉化為string型進行比較)。
$a='123';$b='123.';($b後多了一個小數點)
但是有(==)進行比較是結果卻是true
var_dump($a==$b);
所以一般不用(==)進行字串的比較。
另外,一個數字與一個字串進行比較時,字串會轉化為int或float型(numberic_string含有‘.’,'e','E')。
‘abc’轉化為int(0);‘12ab’轉化為int(12);‘12.3e3'轉化為float(12300);
2.( > < )的比較
2-1:如果是兩個字串的比較,則逐個比較對應的字元的ascii碼。
2-2:如果是數字與字串進行比較,字串先轉化為數字,然後進行比較。
2-3:如果是兩個數字型字串(純數字型字串)進行比較,則這兩個字串首先轉化為數字再進行比較。
$a='100';$b='20';則$a>$b;
但是
如$a=''100a;$b='20';時,結果為$a<$b;