php 合并字符串中的相同项

有一个字符串,用“。”分割,写一个程序。合并字符串中相同的项。如字符串“大家好[81]。你是谁[3]。大家好[3]。老师好[12]。上午好。上午好[12]。”,合并后为"大家好[84]。你是谁[3]。老师好[12]。上午好[13]。"

阅读 2.2k
3 个回答
新手上路,请多包涵

$str = '大家好[81]。你是谁[3]。大家好[3]。老师好[12]。上午好。上午好[12]。';

    $arr = mb_split("。", $str);
    
    foreach ($arr as $k => $v) {
       
        $tmp[] = preg_split('/\[/', $v);
       
    }
    $res = [];
    foreach ($tmp as $k => $v) {
        $res[$v[0]][] = $v[1];
    }
    $result = [];
    foreach ($res as $k => $v) {
        $i=0;
        if(!empty($k)){
            foreach ($v as $k1 => $v1) {
                if(empty($v1)) $i++;
                else $i = $i+ltrim($v1,']');
                $result[$k] = $i;
            }                
        }

    }
   
    $resStr = '';
    foreach ($result as $k => $v) {
        $resStr.=$k.'['.$v.']'.'。';
    }
    print_r($resStr);

$str = '大家好[81]。你是谁[3]。大家好[3]。老师好[12]。上午好。上午好[12]。';

$arr = explode('。',$str);

$result = [];
foreach($arr as $item){
    if(preg_match('!(?<str>.+?)(\[(?<i>\d+)\]?)!',$item,$row)){
        $i = $row['i']??0;
        if(isset($result[$row['str']])){
            $result[$row['str']]+=$i;
        }else{
            $result[$row['str']]=$i;
        }
    }
    
}

$result_str = '';
foreach($result as $key=>$item){
    $result_str .= sprintf('%s[%d]。',$key,$item);
}


var_dump($result_str);
// 大家好[84]。你是谁[3]。老师好[12]。上午好[12]。
$str = '大家好[81]。你是谁[3]。大家好[3]。老师好[12]。上午好。上午好[12]。';

$arr = explode('。',$str);

$result = [];
foreach($arr as $item){
    if(!empty($item) AND preg_match('/^(.*?)(\[(\d+)\])?$/',$item,$row)){
        $i = isset($row[3]) ? $row[3] : 1;

        if(isset($result[$row[1]])){
            $result[$row[1]]+=$i;
        }else{
            $result[$row[1]]=$i;
        }
    }
}

$result_str = '';
foreach($result as $key=>$item){
    $result_str .= sprintf('%s[%d]。',$key,$item);
}

var_dump($result_str);
// 大家好[84]。你是谁[3]。老师好[12]。上午好[13]。

抄袭楼上唯一丶

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题