欢迎各位兄弟 发布技术文章
这里的技术是共享的
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、 当待处理的字符串最终转成的数组比较庞大时,第二种方法的效率将大大高于传统的做法。
来自 http://www.zhixing123.cn/php/32922.html