2012-10-23 29 views
0

在php中有一個標準函數可以返回多字節符號之一的第一個出現位置嗎?php函數查找多字節字符之一的位置

整個任務如下。我有多字節字符串和位置在這個字符串,我需要找到其中一個符號(分隔符)的第一次出現。我寫了下面的函數,但不幸的是它工作得很慢。

$delimiters = array( 
    "\r", "\n", "\t", ".", ";", "!", "?" 
); 

function get_cit_end($str, $end) { 
    global $delimiters; 
    if($end >= mb_strlen($str)) 
     return mb_strlen($str) - 1; 
    $c = mb_substr($str, $end, 1); 
    while($end < mb_strlen($str)) { 
     if(in_array($c, $delimiters)) 
      break; 
     $end++; 
     $c = mb_substr($str, $end, 1); 
    } 
    return $end; 
} 
+3

你爲什麼不使用http: //php.net/manual/en/function.mb-strpos.php? – Nelson

回答

2

我會用mb_strpos(),像這樣:

function get_cit_end($str, $delimeters) { 
    $index = -1; 
    foreach($delimiters as $d) { 
     if(($i = mb_strpos($str, $d)) !== false) { 
      $index = $i; 
      break; 
     } 
    } 
    if($index == -1) return mb_strlen($str) - 1; 
    return $index; 
} 
0

如果啓用mbstring函數重載,你可以使用正常的strpos()功能與多字節字符串:

下mbstring的變量應通過php.ini或vhost-configuration進行設置;他們不會爲每個目錄工作(即通過.htaccess)。

  • mbstring.language =中性
  • mbstring.internal_encoding = UTF-8
  • =的mbstring.func_overload 7

參見:http://php.net/mbstring

相關問題