php 將一個字符串分割爲組成它的字符

問: php裏如何將一個字符串分割爲組成它的字符?

比如hello  -> [h, e, l, l, o]   以下有三種方法:

 

這是需要被分割的字符串:  $str = 'Hello小樣';

字符串的長度: 

$len = mb_strlen($str, 'utf8');// 7

 

第一種: 

$arr = str_split($str);
p($arr);

[總結]: 這裏直接使用str_split 方法來分割, 但不幸的是這個方法不支持中文的解析, 這裏可以考慮下mb_split的分割, 而這裏爲什麼[小樣]二字會被分割成六個亂碼呢? 這裏應該是utf8作怪, utf8中一個漢字佔3個字節, GBK和GB2312中的一個漢字佔2個字節

 

第二種:

$arr = preg_split("//u", $str, -1, PREG_SPLIT_NO_EMPTY);
P($arr);

[總結]: 這裏使用了正則來分割字符

preg_split(pattern, subject, limit, flags)

pattern:用於搜索的模式,字符串形式;

subject: 輸入的字符串;

limit: 限制多少個字符, -1|0|null表示不限制

flags: PREG_SPLIT_NO_EMPTY(返回分隔後的非空部分[常用])  PREG_SPLIT_DELIM_CAPTURE(用於分隔的模式中的括號表達式將被捕獲並返回)  PREG_SPLIT_OFFSET_CAPTURE(對於每一個出現的匹配返回時將會附加字符串偏移量)

 

第三種:

$len = mb_strlen($str, 'utf8');
$tmp = [];
for ($i = 0;$i < $len;$i++) {
    $tmp[] = $str[$i];
}
p($tmp);

[總結]: 用循環來切割字符串, 首先獲取該字符串的長度, 然後for循環, 這裏最後的未知字符是因爲$len = 7,所以循環7次, 不同於第一種方法的utf8字符錯亂問題

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章