跳到主要內容

寫一個UTF8的split函式 - PHP版

因為一些原因,所以必須寫一個utf8的split函式,可惜php只有str_split函式,沒有utf8的…。
所以就試寫一個,程式碼如下

<?php
function utf_str_split($utf_str, $split_len = 1){ 
    $len = mb_strlen($utf_str, 'UTF-8'); 
    $arr = array(); 
    $temp_str = $utf_str; 
    for($i = 0 ; $i<$len/$split_len ; $i++){ 
        $arr[] = mb_substr($temp_str, 0, $split_len, 'UTF-8'); 
        $temp_str = mb_substr($temp_str, $split_len, $len, 'UTF-8'); 
    } 
    return $arr; 
}
?>

以下是Joomla 的 utf8_str_split()
原文連結:Source code for file /phputf8/str_split.php


<?php
function utf8_str_split($str, $split_len = 1){  
    if (!preg_match('/^[0-9]+$/', $split_len) || $split_len < 1) return FALSE; 
    $len = mb_strlen($str, 'UTF-8'); 
    if ($len <= $split_len) return array($str); 
    preg_match_all('/.{'.$split_len.'}|[^\x00]{1,'.$split_len.'}$/us', $str, $ar); 
    return $ar[0]; 
}
?>


用一個六千多字的字串測試
分割長度是1
utf_str_split:0.712316989899 sec
utf8_str_split:1.12109088898 sec
分割長度是2
utf_str_split:0.525295972824 sec
utf8_str_split:0.536201000214 sec
分割長度是10
utf_str_split:0.109910964966 sec
utf8_str_split:0.109711885452 sec
測試完後,只有分割長度為1的時候比較有明顯差距,但是大於1的效率都差不多了

留言

這個網誌中的熱門文章

Android開啟Facebook App

如果手機裡已經安裝了Facebook,為什麼還要開啟瀏覽器重新輸入帳密呢? 直接用Facebook操作不是比較方便呢? --以上是前言--XD 所以為了方便已經安裝Facebook使用者,所以App裡開啟粉絲專頁時,應該會有兩種方式 範例如下: ... public static void openFacebookPage (Context context, String id) { Intent intent = null ; try { context. getPackageManager (). getPackageInfo ( "com.facebook.katana" , 0 ); String uri = "fb://page/" + id; intent = new Intent(Intent. ACTION_VIEW , Uri. parse (uri)); } catch (Exception e) { String uri = "https://www.facebook.com/pages/1/" + id; intent = new Intent(Intent. ACTION_VIEW , Uri. parse (uri)); } context. startActivity (intent); } ... 參考資料: android - launch facebook app from other app - Stack Overflow php - Facebook API - How do I get a Facebook user's profile image through the Facebook API (without requiring the user to "Allow" the applicati...

What is phpize

What is phpize According to the PHP official document : The phpize command is used to prepare the build environment for a PHP extension. If you need to build such an extension that from github or another code repositories, you can use  build tools to perform the build manually. 

Android 如何在 Fragment 執行 onCreateOptionsMenu

Activity執行 Fragment預設並不會執行onCreateOptionsMenu,因此為了讓每個Fragment都有不同的OptionsMenu時,就得要執行setHasOptionsMenu(true); 簡易範例如下 ... @Override public void onActivityCreated (Bundle savedInstanceState) { super . onActivityCreated (savedInstanceState); setHasOptionsMenu( true ); } @Override public void onCreateOptionsMenu (Menu menu, MenuInflater inflater) { inflater. inflate (R. menu . menu_place , menu); super . onCreateOptionsMenu (menu, inflater); } ... 這樣就可以執行到onCreateOptionsMenu的功能了