zoukankan      html  css  js  c++  java
  • php将一个字符串转变成键值对数组的效率问题

    有这样一种需求,将形式为“TranAbbr=IPER|AcqSsn=000000073601|MercDtTm=20090615144037”的字符串转换成如下格式的数组:

    Array
    (
        [TranAbbr] => IPER
        [AcqSsn] => 000000073601
        [MercDtTm] => 20090615144037
    )
    1.第一种方式
    /* 将一个字符串转变成键值对数组
     * @param    : string str 要处理的字符串 $str ='TranAbbr=IPER|AcqSsn=000000073601|MercDtTm=20090615144037';
     * @param    : string sp 键值对分隔符
     * @param    : string kv 键值分隔符
     * @return    : array*/
    function str2arr ($str,$sp="|",$kv="=")
    {
        $arr = str_replace(array($kv,$sp),array('"=>"','","'),'array("'.$str.'")');
        eval("$arr"." = $arr;");   // 把字符串作为PHP代码执行
        return $arr;
    }

     2.第二种方式

    //传统的做法
    function str2arr1 ($str){
        $arr = explode("|",$str);
        $r = array();
        foreach ($arr as $val ){
            $t = explode("=",$val);
            $r[$t[0]]= $t[1];
        }
        return $r;
    }
    
    $a='TranAbbr=IPER|AcqSsn=000000073601|MercDtTm=20090615144037|TranAbbr=IPER|AcqSsn=000000073601|MercDtTm=20090615144037|TranAbbr=IPER|AcqSsn=000000073601|MercDtTm=20090615144037|TranAbbr=IPER|AcqSsn=000000073601|MercDtTm=20090615144037|TranAbbr=IPER|AcqSsn=000000073601|MercDtTm=20090615144037|TranAbbr=IPER|AcqSsn=000000073601|MercDtTm=20090615144037|TranAbbr=IPER|AcqSsn=000000073601|MercDtTm=20090615144037|TranAbbr=IPER|AcqSsn=000000073601|MercDtTm=20090615144037|TranAbbr=IPER|AcqSsn=000000073601|MercDtTm=20090615144037|TranAbbr=IPER|AcqSsn=000000073601|MercDtTm=20090615144037|TranAbbr=IPER|AcqSsn=000000073601|MercDtTm=20090615144037|TranAbbr=IPER|AcqSsn=000000073601|MercDtTm=20090615144037|TranAbbr=IPER|AcqSsn=000000073601|MercDtTm=20090615144037|TranAbbr=IPER|AcqSsn=000000073601|MercDtTm=20090615144037';
    
    for ($i=0;$i<50;$i++){
        $t = microtime();
        $b = str2arr1($a);
        $t1 = microtime();
        str2arr($a);
        $t2 = microtime();
        echo $t2+$t-2*$t1.'<br />';
    }

    两种写法各有优势:

    1、 第一种容易想到,耳熟能详;第二种不容易想到,且eval函数在使用时要注意安全隐患。

    2、 当待处理的字符串最终转成的数组比较庞大时,第二种方法的效率将大大高于传统的做法。

    
    

     

  • 相关阅读:
    Git SSH Key 生成步骤
    IOS音频1:之采用四种方式播放音频文件(一)AudioToolbox AVFoundation OpenAL AUDIO QUEUE
    IOS网络篇1之截取本地URL请求(NSURLProtocol)
    IOS 视频直播/智能家居(一行行敲代码,从零开始)lesson:1整体架构
    iOS应用支持IPV6,就那点事儿
    App store最新审核标准公布
    iOS应用内付费(IAP)开发步骤列表
    iOS应用内支付(IAP)的那些坑
    IOS 第三方支付的使用:支付宝
    亲们,委托你们是否已忘记
  • 原文地址:https://www.cnblogs.com/houss/p/11304450.html
Copyright © 2011-2022 走看看