将混合字符串按相同类型加特殊字符拼接

188 阅读1分钟
//字符串例如aaa123bbb456 123aaa456bbb
//写的感觉很不好 有大神看到希望给出更优得解决方案
public function demo($str = '12111aaa123bbb456')
{
    $array = [];
    $strTemp = NULL;
    $intTemp = NULL;
    for ($i=0;$i<strlen($str);$i++){
    $cur = $str[$i];
        if(is_numeric($cur))
        {
            if(!empty($strTemp)){
                $array[] = $strTemp;
                $strTemp = NULL;
            }
            $intTemp .= $cur;
        }else{
            if(!empty($intTemp)){
                $array[] = $intTemp;
                $intTemp = NULL;
            }
            $strTemp .= $cur;
        }
    }
    if(!empty($strTemp)){
        $array[] = $strTemp;
    }
    if(!empty($intTemp)){
        $array[] = $intTemp;
    }
    var_dump(implode(':',$array));die;

}



//同行给出代码 在之上做了优化、
public function demo()
{
    $str = 'aaa123aaab456bbb333ccc';
    $str1 = '';
    $j=0;
    for ($i=0;$i<strlen($str);$i++){
        if(is_numeric($str[$i])){
            $str1.= $j==1? $str[$i]:':'.$str[$i];
            $j=1;
        }else{
            $str1.= $j==0? $str[$i]:':'.$str[$i];
            $j=0;
        }
    }
    var_dump( trim( $str1,':'));
}