為了維護(hù)世界的和平,我決定
先上代碼:
$Str='咸魚(yú)字符串等著翻身,hello?';
$NumStr=mb_strlen($Str);
for($i=1;$i<=$NumStr;$i++)
echo mb_substr($Str,-$i,1);
輸出結(jié)果:
?olleh,身翻著等串符字魚(yú)咸
代碼分析:
要想實(shí)現(xiàn)字符串的反轉(zhuǎn),首先我們需要一個(gè)能從指定位置讀取字符串的函數(shù)廊勃,然后從最后一個(gè)字符開(kāi)始逐次逐個(gè)向前讀取并輸出。
考慮到字符串包含中文就沒(méi)有使用strlen()
经窖、substr()
這兩個(gè)函數(shù)[1]坡垫,而是用到了另外兩個(gè)有趣的函數(shù)mb_strlen()、mb_substr()画侣。這兩個(gè)函數(shù)都屬于mbstring擴(kuò)展中的一員葛虐,能用來(lái)處理中文字符串。
-
mb_strlen() : 獲取字符串長(zhǎng)度
- mb_strlen(字符串棉钧,字符編碼
可省略
) - 字符編碼項(xiàng)如果省略會(huì)使用內(nèi)部字符編碼屿脐,可通過(guò)mb_internal_encoding()獲取當(dāng)前內(nèi)部字符編碼
- mb_strlen(字符串棉钧,字符編碼
-
mb_substr() : 獲取部分字符串
mb_substr(字符串涕蚤,起始位置,長(zhǎng)度
可省略
的诵,字符編碼可省略
)-
起始位置
(1) 當(dāng)為0或正整數(shù)時(shí)万栅,字符串依照第一字符為位置0、第二字符為位置1以此類(lèi)推的規(guī)則西疤,以起始位置起返回字符串二 十 四 歲 0 1 2 3 (2) 當(dāng)為負(fù)整數(shù)時(shí)烦粒,字符串依照倒數(shù)第一字符為位置-1、倒數(shù)第二字符為位置-2以此類(lèi)推的規(guī)則代赁,以起始位置起返回字符串
空 格 氛 圍 -4 -3 -2 -1 長(zhǎng)度
(1) 當(dāng)省略時(shí)扰她,返回字符串由起始位置起至末尾字符
(2) 當(dāng)為0或正整數(shù)時(shí),返回字符串由起始位置起規(guī)定長(zhǎng)度個(gè)數(shù)的字符
(3) 當(dāng)為負(fù)整數(shù)時(shí)芭碍,返回字符串由起始位置起至倒數(shù)第(規(guī)定長(zhǎng)度的絕對(duì)值)的字符字符編碼項(xiàng)如果省略會(huì)使用內(nèi)部字符編碼
-
由于編碼原因無(wú)法正確地處理中文字符串徒役,具體詳見(jiàn)http://developer.51cto.com/art/201105/263103.htm ?