判斷字串為不為空,不能使用empty,因為empty會認為』0』也是空的
$s = '0';
if(empty($s)) else
輸出
"s為空"
『0』 顯然是不為空的,所以使用empty判斷字串是否為空就是個陷阱!
後面改進為,方法一:
if(!isset($s) || $s === '') else
輸出
$s = array(); //輸出:"s不為空"
$s = 0; //輸出:"s不為空"
$s = '0'; //輸出:"s不為空"
$s = ''; //輸出:"s為空"
$s = null; //輸出:"s為空"
$s = null; //輸出:"s為空"
$s = 'null'; //輸出:"s不為空"
陣列和數字也被判定成不為空了。
不過既然是弱型別語言,到時候這些也可以轉為字串格式來使用,所以關係不大。
但是在特殊情況下,需要更嚴格的檢查方案,則需要再改進下:
方法二:
if(!isset($s) || !is_string($s) || strlen($s) == 0) else
先判斷有沒有賦值,然後判斷是不是字串,最後判斷字串長度是不是為0,有了三重保險,輸出:
$s = array(); //輸出:"s為空"
$s = 0; //輸出:"s為空"
$s = '0'; //輸出:"s不為空"
$s = ''; //輸出:"s為空"
$s = null; //輸出:"s為空"
$s = null; //輸出:"s為空"
$s = 'null'; //輸出:"s不為空"
這樣把非字串型別也排除在外了。
使用什麼方法判定字串為不為空要根據具體需求,如果對型別不那麼嚴格,用方法一;如果只允許字串,使用方法二。
$is_space = ctype_space($text);
如果全是空格,返回true;如果不是,返回false。
$test_array = explode(' ', $test_string);
如果使用上面的方式,那就太單純了,假如字串包含多個空格怎麼辦?
需要使用以下方法:
$test_array = preg_split('#\s+#', $test_string);
$a = '0x000000010184f2fc';
// 方法一
$b = intval($a, 16);
var_dump($b); // 輸出: 4320457468
// 方法二
$c = base_convert($a, 16, 10);
var_dump($c); // 輸出: 4320457468
intval()函式可以將字串轉為10進製整數
引數一為要轉換的數字(字串型別)
引數二是可選引數,用來指定基底,預設是10
也就是說,字串為『0x』開頭,是16進製制格式,引數二要指定為16
字串為『0』開頭,是8進製格式,引數二要指定為8
返回值為10進製整數;如果不能識別該字串,則返回0
base_convert()函式也可以用來轉換進製,只不過返回的還是字串型別的數字
引數一為要轉換的數字(字串型別)
引數二為當前的進製
引數三為要轉換的進製
返回值為相應進製的數字(字串型別);如果字串不能識別,則返回『0』。
方法一,使用正規表示式判斷:
$test = " \t ";
$pattern = '/^(\s+)$/';
$is_match = preg_match($pattern, $test);
if ($is_match) else
// 輸出:都是空格
『\t』 製表符也是空格。
方法二,使用ctype_space()函式:
$test = " \t ";
$is_match = ctype_space($test);
if ($is_match) else
php 字串處理
一 字串格式化 1.trim 可以出去字串開始位置和結束位置的空格,並返回結果字串 ltrim 除去左邊空格 rtrim 除去右邊空格 2.nl2br 用代替字串中的換行符 3.printf 將乙個格式化的字串輸出到瀏覽器中 sprintf 返回乙個格式化的字串 例 printf total amo...
PHP字串處理
雙引號中的內容可以被解釋與替換,單引號中的字元當做普通字元處理 使用 或 一大波函式將來襲。strlen 計算字串長度 substr string str,int start,int length 從start出擷取長度為length的字串 strcmp str1 str2 區分大小寫 strcas...
php字串處理
字串擷取 substr 對字串進行指定數量的擷取 strchr strstr別名 查詢乙個字串在另乙個字串中第一次出現,返回字串到結尾 stristr strrchr 查詢乙個這符串在另乙個字串中最後出現的位置 strpos 從頭查詢乙個字串在另乙個字串中第一次出現的位置,區分大小寫 stripos...