返回首頁
當前位置: 主頁 > 網絡編程 > Php實例教程 >

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

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

有這樣一種需求,將形式為“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
------分隔線----------------------------
推薦內容
猜你感興趣
深蓝海域APP