###### tags: `PHP` `string` `字串` # 2022.4.22 字串常用函式 # substr() / mb_subster() -從元字串中取出部分字串 - substr 用於英文系統單字元字串,因減少判斷英文之外的語言, 在單只有英文使用者的情況下,選用此字集效能會更佳 一個中文字算三個字元,當字元不夠顯示完整的中文字時,產生亂碼並無法顯示後面的部分 <pre> $str="今天本地確診三千例" ; 在<font color=#731919>substr</font>中,<font color=#A559F9>第一個數為開始的數</font>,<font color=#197334>第二個為顯示的字元數量</font> $sub=<font color=#731919>substr(</font>$str,<font color=#A559F9>2</font>,<font color=#197334>4</font><font color=#731919>)</font> ; echo $sub ; </pre> 顯示出 " ? 天 " 這個例子為 2,4 作為值 因為第一個值從2字元開始, 所以"今"字的前兩個字元未納入 ,第三個字元顯示在"今"裡面 所以"今"只獲得了1/3個字元而無法正確顯示 , 4減掉"今"用掉的1個字元 剩下3個字元 , "天"剛好使用完剩下的3個字元 ,所以可以正確顯示出"天" --- - mb_substr (**multiple byte**) 用於多語系,多字元字集,可以正確顯示英文之外的文字 就算中英混雜 ,也可以一個字元對應一個字來正確顯示 <pre> 在字數上 索引是由0開始做為第一個字 0 1 2 34 5 6 7 8 $ str="今天本地確診三千例" ; 在<font color=#731919>mb_substr</font>中,<font color=#A559F9>第一個數為開始的數</font>,<font color=#197334>第二個為顯示的字元數量</font> $sub=<font color=#731919>mb_substr(</font>$str,<font color=#A559F9>2</font>,<font color=#197334>4</font><font color=#731919>)</font> echo $sub ; </pre> 顯示出 "本地確診" 同樣的例子 ,因從2開始所以不顯示 "今天" (索引0 1) , 由"本"作為2開始顯示4個字為 "本地確診" 為了避免之後更新時需要添加其它語言而產生的麻煩,通常建議用 mb_substr --- # trim() -去除頭尾空白 去除頭尾空白的用意是避免輸入文字不小心按到空白, 有時候資料庫不允許空白存在, 所以可以用trim去除空白 # str_repeat() -重複特定字元 --- # str_replace() -取代字串 先設定一個密碼為 變數 <pre> $ password="aaddw1123"; 在<font color=#731919>str_repeat</font>中,<font color=#A559F9>第一個值為替換的符號</font>,<font color=#197334>第二個值為要被替換的內容</font> $ password=<font color=#731919>str_repeat (</font> <font color=#A559F9>" * "</font> , <font color=#197334>mb_strlen ( $password )</font> <font color=#731919>)</font>; 也可以拆成兩段編寫 $ strlen=mb_strlen($password); $ password=<font color=#731919>str_repeat (</font><font color=#A559F9>"*"</font>,<font color=#197334>$strlen</font><font color=#731919>)</font>; echo $password; </pre> 顯示出 ********* --- # explode() -"以"特定字串/字元/符號 分割字串 -爆炸!!- *例: " 我-很-好 " 可以設定以 "-" 設為引信把 "我 很 好" 三個字炸開, 獲得一個陣列=>[我,很,好] 先設定一個字串為 變數 <pre> $ str="this,is,a,book"; 在<font color=#731919>explode</font>中,<font color=#A559F9>第一個值為引信</font>,<font color=#197334>第二個值為要炸成陣列的變數</font> $ array=<font color=#731919>explode(</font><font color=#A559F9>","</font>,<font color=#197334>$str</font><font color=#731919>)</font>; print_r($array); </pre> 顯示出 Array ( [0] => this [1] => is [2] => a [3] => book ) --- # impolode() / join() &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; -以特定字串/字元/符號將陣列元素合併成字串 -聚合- 設定特殊符號 ,將陣列中的元素 合併成字串 和上面的explode是相反的功能 *例: 陣列 [我,-,很,-,好] 將 "-" 設為聚合符號, 獲得 "我很好" 的字串 這裡先使用上面的explode作為例子 <pre> $ str="this,is,a,book" <font color=#197334>$ array</font>=expolde(",",$ str); print_r(<font color=#197334>$array</font>); </pre> 顯示出 Array ( [0] => this [1] => is [2] => a [3] => book ) 然後 <pre> 在<font color=#731919>join</font>的<font color=#A559F9>第一個值為合併元素</font>,<font color=#197334>第二個值為合併內容</font> $ newstr=<font color=#731919>join(</font><font color=#A559F9>" "</font>,<font color=#197334>$array</font><font color=#731919>)</font>; echo $newstr; </pre> 顯示出 this is a book --- # strpos() -返回某字元在字串首次出現的位置 string position (字串的位置) ~~等同PHP的 sort( [ ] )功能~~ <pre> $str="網頁設計範例教本第五版"; 在<font color=#731919>strpos</font>的,<font color=#A559F9>第一個值為要放入的字串</font>,<font color=#197334>第二個值為開始的位置</font>(取用第一個字) $pos=<font color=#731919>mb_strpos(</font><font color=#A559F9>$str</font>,<font color=#197334>"範例教本"</font><font color=#731919>)</font>; $str=mb_substr($str,0,$pos); echo $str ; </pre> 顯示出 網頁設計 這裡取用 "範例教本" 作為字串首次位置, 不顯示 "範例教本" 後面的 "第五版" 字串 # strlen() / mb_strlen() -字串長度 計算字串長度 # 字串函式整合應用---改變句子中特定的文字形式 顏色 應用 練習 <pre> $ str="學會PHP網頁程式設計,薪水會加倍,工作更好找"; $ search="薪水"; $ pos=mb_strpos($str,$search); $ head=mb_substr($str,0,$pos); $ tail=mb_substr($str,$pos+mb_strlen($search)); $ str=$head . "< span style='font-size:2rem;color:red'>" . $search . "< /span>" . $tail ; echo $str; </pre>