php 判断字符串之间包含关系

之前常用stristr ,  strpos判断。

因为处理1000W * 1000W级别,循环就是漫长漫长...

在此,对stristr, strpos, explode判断字符串包含关系处理速度对比:

Header("Content-Type:text/html;charset=utf-8");
ini_set('memory_limit','-1');
set_time_limit(0);



$count = 10000000;//循环次数

$str1 = 'abcdef';
$str2 = 'abce';
$str3 = 'abc';

function str_is_include($str1, $str2){//strpos判断包含关系

    if( strpos($str1, $str2) !== false )    return true;
    else return false;
}

function str_is_include2($str1, $str2){//explode判断包含关系
    
    $arr = explode($str2, $str1);
    if(count($arr) > 0)    return true;
    else return false;
}

$q = time();
for($i=0; $i<$count; $i++){
    
    if( strpos($str1, $str2)!== false ){}
    if( strpos($str1, $str3) !== false ){}//此处小插曲; 本来str_is_include($str1,$str2)来判断。 但是输出strpos耗时:17秒 跟stristr同一个级别。 于是考虑循环内部不去取外部函数。省掉单独为函数开辟堆栈时间。1000W次就生下来了10秒。
} echo '循环strpos耗时:'.(time()-$q).'<br/>'; 
$w = time();
for($i=0; $i<$count; $i++){
  
stristr($str1, $str2);
  
stristr($str1, $str3);
}
echo '循环stristr耗时:'.(time()-$w).'<br/>';
$e = time();
for($i=0; $i<$count; $i++){
  str_is_include2(
$str1, $str2);
  str_is_include2(
$str1, $str3);
}
echo '循环explode耗时:'.(time()-$e);

//////////////////////////////////////////////////////(秒)
循环strpos耗时:7
循环stristr耗时:17
循环explode耗时:29

 strpos 胜出!!!

posted @ 2013-07-28 13:28  群叔  阅读(853)  评论(0编辑  收藏  举报