###### 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() -以特定字串/字元/符號將陣列元素合併成字串
-聚合-
設定特殊符號 ,將陣列中的元素 合併成字串 和上面的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>