»áÔ±£º ÃÜÂ룺 ¡¡Ãâ·Ñ×¢²á | Íü¼ÇÃÜÂë | »áÔ±µÇ¼ ÍøÒ³¹¦ÄÜ£º ¼ÓÈëÊÕ²Ø ÉèΪÊ×Ò³ ÍøÕ¾ËÑË÷  
¼¼ÊõÎĵµ > Web¿ª·¢ > PHP
¸ßЧµÄÖÐÎÄ×Ö·û´®½ØÈ¡º¯Êý
·¢±íÈÕÆÚ£º2003-08-18 00:00:00×÷ÕߣºÐ ³ö´¦£º  

ÔÚphpÖÐʹÓô«Í³µÄ×Ö·û´®½ØÈ¡º¯Êýsubstr´¦Àíº¬ÓÐÖÐÎÄ×Ö·ûµÄ×Ö·û´®Ê±»á³öÏÖºº×Ö±»ÇжϵÄÏÖÏó¡£µ±¿ÉÒÔʹÓÃphpÀ©Õ¹¿âʱ£¬ÎÒÃÇ¿ÉÒÔÓÃmb_substr´úÌæ¡£µ«ÊǸÃÀ©Õ¹¿âÔÚÁ¬½ÓʱÓÐÒ»¶¨µÄÀ§ÄÑ¡ª¡ªlinuxÏÂÐèÖØбàÒëphp£¬ÓÐʱ²¢²»ÄÜ¿É×öµ½£¬¸üºÎ¿öÆäÈßÓຯÊý½Ï¶à¡£

ÔÚÍøÂçÉÏ¿ÉÒÔ¿´µ½ºÜ¶àʵÏִ˹¦Äܵĺ¯Êý¡£µ«Ëã·¨¶àÊÇÑ­»·Åжϣ¬µ±×Ö·û´®½Ï´óʱЧÂʼ«µÍ¡£

Ϊ´ËÕâÀï½éÉÜÁ½¸ö¸ßЧµÄº¯Êý£ºc_substr¡¢m_substr¡£ËûÃǵÄÓ÷¨ÍêÈ«ÓësubstrºÍmb_substrÏàͬ¡£²»Í¬Ö®´¦ÔÚÓÚ£ºc_substr°´×Ö½Ú¼ÆË㣬¼´Ò»¸öºº×ֵij¤¶ÈΪ2£»m_substr°´×Ö¼ÆË㣬¼´Ò»¸öºº×ֵij¤¶ÈΪ1¡£¿É¸ù¾ÝÐèҪѡÓá£

function c_substr($str,$start=0) {

 $ch = chr(127);

 $p = array("/[\x81-\xfe]([\x81-\xfe]|[\x40-\xfe])/","/[\x01-\x77]/");

 $r = array("","");

 if(func_num_args() > 2)

  $end = func_get_arg(2);

 else

  $end = strlen($str);

 if($start < 0)

  $start += $end;

 if($start > 0) {

  $s = substr($str,0,$start);

  if($s[strlen($s)-1] > $ch) {

   $s = preg_replace($p,$r,$s);

  $start += strlen($s);

  }

 }

 $s = substr($str,$start,$end);

 $end = strlen($s);

 if($s[$end-1] > $ch) {

  $s = preg_replace($p,$r,$s);

  $end += strlen($s);

 }

 return substr($str,$start,$end);

}

function m_substr($str,$start) {

 preg_match_all("/[\x80-\xff]?./",$str,$ar);

 if(func_num_args() >= 3) {

  $end = func_get_arg(2);

  return join("",array_slice($ar[0],$start,$end));

 }else

  return join("",array_slice($ar[0],$start));

}

ÐÔÄܲâÊÔ£º

1¡¢Ê¹ÓÃpearµÄBenchmark_IterateÀà×÷Ϊ¼ÆʱÆ÷

2¡¢ÒÔÑ­»·ÅжϵĶÔÕÕº¯Êý

function TrimChinese($str,$len){

 $r_str="";

 $i=0;

 while ($i<$len){

  $ch=substr($str,$i,1);

  if(ord($ch)>0x80) $i++;

   $i++;

 }

 $r_str=substr($str,0,$i);

 return $r_str;

}

3¡¢²âÊÔ»·¾³£ºp2/166¡¢nt4 iis4+php4.3.1

4¡¢²âÊÔ´úÂ룺

require_once "Benchmark/Iterate.php";

$benchmark = new Benchmark_Iterate;

$benchmark->run(100, "TrimChinese", $str , 1000);

$result = $benchmark->get();

echo "TrimChinese:".$result[mean]."<br>";

$benchmark->run(100, "c_substr", $str , 3,1000);

$result = $benchmark->get();

echo "c_substr:".$result[mean]."<br>";

$benchmark->run(100, "m_substr", $str , 3,1000);

$result = $benchmark->get();

echo "m_substr:".$result[mean]."<br>";

$benchmark->run(100, "mb_substr", $str , 3,1000);

$result = $benchmark->get();

echo "mb_substr:".$result[mean]."<br>";

5¡¢²âÊÔÎÄ×Ö£º±¾ÎÄ

6¡¢²âÊÔ½á¹û£º(Ãë)

TrimChinese:0.058972

c_substr:0.000809

m_substr:0.000666

mb_substr:0.000458

¡¾·µ»Ø¶¥²¿¡¿ ¡¾´òÓ¡±¾Ò³¡¿ ¡¾¹Ø±Õ´°¿Ú¡¿

¹ØÓÚÎÒÃÇ / ¸øÎÒÁôÑÔ / °æȨ¾Ù±¨ / Òâ¼û½¨Òé / ÍøÕ¾±à³ÌQQȺ   
Copyright ©2003- 2024 Lihuasoft.net webmaster(at)lihuasoft.net ¼ÓÔØʱ¼ä 0.00469