標籤:模式 gbk cap flags 正則 位元組 php alt 位移量
問: 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字元錯亂問題
php 將一個字串分割為組成它的字元