计算字符串的不同,优化之后

//检测字符串相同的部分
function check_str($str1,$str2){
    static $str_length_flag=1000000000;
    static $flag=0;

    $tmp_str1=$str1;$tmp_str2=$str2;
    $strlen=utf8_strlen($str1);
    $str_temp='';
    for ($i=0; $i <$strlen ; $i++) {
        for ($j=utf8_strlen($str_temp)+1; $j <=$strlen-$i ; $j++) 
        {
            //$j=$str_temp?utf8_strlen($str_temp):$j;
            $str_1=mb_substr($str1, $i, $j, 'utf-8');
            $str_start=strpos($str2, $str_1);
            if (!($str_start===false)) {
                if(strlen($str_1)>strlen($str_temp)){
                    $str_temp=$str_1;
                    $ex_info=array(
                        'str1_left'=>$i,
                        'str1_right'=>$j,
                        'str2_left'=>$str_start,
                        'str2_right'=>$str_start+strlen($str_temp),
                    );
                }
                if(utf8_strlen($str_1)>=utf8_strlen($str1)||utf8_strlen($str_1)>$str_length_flag){
                    break 2;
                }
            }else{
                break;
            }
        }
    }
    if (!$flag) {
        $str_length_flag=utf8_strlen($str_temp);
        $flag=1;
    }
    $res_arr=array();
    if (isset($ex_info)) {
        $str1_left_str=mb_substr($str1, 0, $ex_info['str1_left'], 'utf-8');
        $str2_left_str=substr($str2,0,$ex_info['str2_left']);
        if ($str1_left_str&&$str2_left_str) {
            $strleft=check_str($str1_left_str,$str2_left_str);
            if ($strleft) {
                $res_arr=array_merge($res_arr,$strleft);
            }
        }
        if ($str_temp) 
        {
            $res_arr=array_merge($res_arr,array($str_temp));
        }


        $str1_right_str=mb_substr($str1, $ex_info['str1_left']+$ex_info['str1_right'], utf8_strlen($str1), 'utf-8');
        $str2_right_str=substr($str2,$ex_info['str2_right'],strlen($str2));
        if ($str1_right_str&&$str2_right_str) 
        {
            $strright=check_str($str1_right_str,$str2_right_str);
            if ($strright) {

                $res_arr=array_merge($res_arr,$strright);

            }
        }
    }
    return $res_arr;

}
//改变样式
function str_color($str1,$str2,$arr){
    foreach ($arr as $key => $value) {
        $start1=strpos($str1,$value);
        $str1=substr_replace($str1, '---$'.$key.'$', $start1,strlen($value));
        $start2=strpos($str2,$value);
        $str2=substr_replace($str2, '---', $start2,strlen($value));
    }
    $arr1_temp=explode('---', $str1);
    $arr2_temp=explode('---', $str2);
    $temp_arr=array();
    foreach ($arr1_temp as $key => $value) {
        $check=preg_replace('/^\$(\d+)\$$/', '', $value);
        if (strlen($check)&&strlen($arr2_temp[$key])) {
            $temp_arr[]='<del>'.$arr2_temp[$key].'</del>'.'<ins color="greed">'.$value.'</ins>';//修改
        }elseif(strlen($check)){
            $temp_arr[]='<ins color="greed">'.$value.'</ins>';//新加的
        }elseif(strlen($arr2_temp[$key])){
            $temp_arr[]='<del>'.$value.$arr2_temp[$key].'</del>';//删除的
        }else {
            $temp_arr[]=$value;
        }
    }
    $temp_arr=preg_replace_callback('/(.*)(\$(\d+)\$)(.*)/', function ($matchs) use($arr){
        return $arr[$matchs[3]].$matchs[1].$matchs[4];
    }, $temp_arr);
    return implode('', $temp_arr);
}
$str1='我叫小明';
        $str2='我的名字是小明';
        echo "
        <style>
ins{
text-decoration: none;
padding: 3px 0;
background:
 #EAF0DD;
color: #5B7918;
}
del{text-decoration: line-through;
padding: 3px 0;
background: #f5dfdf;
color: #ac1414;}
        </style>
        ";
        echo(str_color($str2,$str1,check_str($str1,$str2)));
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值