• <acronym id="danlv"><form id="danlv"></form></acronym>
  • <dd id="danlv"><rt id="danlv"></rt></dd>
      <var id="danlv"><rt id="danlv"><big id="danlv"></big></rt></var>
      1. <code id="danlv"><ol id="danlv"></ol></code>
        <var id="danlv"><rt id="danlv"></rt></var>
          1. <code id="danlv"></code>
            返回首頁
            當前位置: 主頁 > 網絡編程 > Php實例教程 >

            php將一個字符串轉變成鍵值對數組的效率問題

            時間:2013-03-30 21:42來源:知行網www.n1979.com 編輯:麥田守望者

            有這樣一種需求,將形式為“TranAbbr=IPER|AcqSsn=000000073601|MercDtTm=20090615144037”的字符串轉換成如下格式的數組:
             

             

            Array
            (
                [TranAbbr] => IPER
                [AcqSsn] => 000000073601
                [MercDtTm] => 20090615144037
            )
            /* 將一個字符串轉變成鍵值對數組
             * @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;");
                return $arr;
            }

            一般時候,大家很容易想到用explode和foreach來處理,代碼如下:
             

            //傳統的做法
            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、 當待處理的字符串最終轉成的數組比較龐大時,第二種方法的效率將大大高于傳統的做法。

            ------分隔線----------------------------
            標簽(Tag):php php教程 php實例教程 php5 php源代碼 php基礎教程 php技巧 php6
            ------分隔線----------------------------
            推薦內容
            猜你感興趣
            日韩在线av免费视久久