解决方案 »

  1.   

    第二个输出弄错了是下面的
    $teem []= preg_replace('!s:(\d+):"(.*?)";!se', "'s:'.strlen('$2').':\"$2\";'", $arr['invoice_type'] );
    echo "<pre>";
    print_r($teem);
    输出
    Array
    (
        [0] => a:2:{s:4:"type";a:3:{i:0;s:8:"个人发票";i:1;s:8:"企业发票";i:2;s:0:"";}s:4:"rate";a:3:{i:0;d:6;i:1;d:6;i:2;d:0;}}
    )
      

  2.   


    第二个输出弄错了是下面的
    $teem []= preg_replace('!s:(\d+):"(.*?)";!se', "'s:'.strlen('$2').':\"$2\";'", $arr['invoice_type'] );
    echo "<pre>";
    print_r($teem);
    输出
    Array
    (
        [0] => a:2:{s:4:"type";a:3:{i:0;s:8:"个人发票";i:1;s:8:"企业发票";i:2;s:0:"";}s:4:"rate";a:3:{i:0;d:6;i:1;d:6;i:2;d:0;}}
      

  3.   

    $s = preg_replace_callback('/s:\d+:"(.+?)";/s',
    function($r) {
    $n = strlen($r[1]);
    return "s:$n:\"$r[1]\";";
    }, $s);
      

  4.   


    大神我按照你的改了输出数据是这样
    代码
     $teem = preg_replace_callback('/s:\d+:"(.+?)";/s',
                function($r) {
                    $n = strlen($r[1]);
                    return "s:$n:\"$r[1]\";";
                }, $arr['invoice_type'] );
            echo "<pre>";
            print_r($teem);
    输出
    a:2:{s:4:"type";a:3:{i:0;s:8:"个人发票";i:1;s:8:"企业发票";i:2;s:12:"";}s:4:"rate";a:3:{i:0;d:6;i:1;d:6;i:2;d:0;}}企业发票后边S:0:""   变为了s:12:""  多了12长度,这个怎么来的
      

  5.   

    没考虑值为空的情况
    把 '/s:\d+:"(.+?)";/s' 
    改为 '/s:\d+:"(.*?)";/s'