幾個PHP數字和文字操作上的小眉角
小心字串比對:用錯運算子會出來你不想要的結果。
$a= 12345;
$b= "12345";
$c= "12345abc";
if($a == $b)print "true"; else print "false"; //true
if($a == $c)print "true"; else print "false"; //true 特別注意這個
if($b == $c)print "true"; else print "false"; //false
if($a === $b)print "true"; else print "false"; //false
if($a === $c)print "true"; else print "false"; //false
if($b === $c)print "true"; else print "false"; //false
快速去除掉數字後文字的方法:快速,有效率
上例 $c="12345abc" 要除掉後面的 "abc",不必用什麼麻煩的字串比對,直接使用:
$c *=1; //$c=12345 由字串變成整數類型
或
$c = (int)$c; //$c=12345
這裡要注意,如果字串一開始不是數字,會變成0:
$d= "def1234";
print $d*1; //0
print (int)$d; //0
print is_int($d*1); //1
POST或GET送來的一定是字串:別用錯比對方法
例如用 index.php?sn=12345 用GET傳入的
// $_GET['sn']=12345;
print "is_int=".is_int($_GET['sn']); //空 false
print "is_numeric=".is_numeric($_GET['sn']); //1
print "is_string=".is_string($_GET['sn']); //1
所以務必注意post或get傳送過來的值,就算是數字,也是數字字串
判斷是文字、數字或是文字帶數字的方法:可以讓一個欄位讓使用者輸入文字或數字
對於數字、文字或是文字帶數字的判斷,需要多一點細心,否則查錯會非常頭大。
假如有這些變數,想要區分他們,該怎麼做?(刮號中為型別)
$a= array("123", 123, 123.45, 0x88, "123abc", "adc123"); foreach($a as $it){ print "$it=". is_numeric($it) . "\n"; print "$it=". is_int($it) . "\n"; }
結果以表格來表示:
"123" | 123 | 123.45 | 0x88 | "123abc" | "abc123" | |
is_numeric | TRUE | TRUE | TRUE | TRUE | FALSE | FALSE |
is_int | FALSE | TRUE | FALSE | TRUE | FALSE | FALSE |
php有二個函數:
is_int:只有整數類型判斷為true,所以"123"為FALSE,特別注意
is_numberic只要是數字構成,都判斷為true
所以可知道,怎麼區分知道 字串是數字,還是數字帶文字(或文字帶數字),就用 is_numeric。
原文 2014-07-11 01:31:37