php截取字符串中的链接参数

作者:enenba | 发表于:2012-02-20 13:29 | 分类:php源码

php截取字符串中的链接参数,如下例子

$str=http://localhost/aaa.php?a=12&b=22&c=33

我希望得到其中变量b的值,即22,怎么写,&b=22也可能排在最后,即没有&c=33了。

这一是种写法,即使用正则

<?php
$str="http://localhost/aaa.php?a=12&b=22&c=33";
preg_match('/b=([^&]*)/is', $str, $s); 
echo $s[1];
?>

这是另种写法,不使用正则

 

<?php
$str="http://localhost/aaa.php?a=12&b=22&c=33";
$s=parse_url($str);
$s=$s[query];
$s=explode("&", $s);
$s=$s[1];
$s=str_replace("b=","", $s);
echo $s; 
?>

哪种比较好呢

主要是看效率了,

以下是做效率测试的例子,进行1000次运算的时间:

1、使用正则的测试代码:

<?php
define('START_TIME',microtime(true));
for($n=0;$n<1000;$n++) {
$str="http://localhost/aaa.php?a=12&b=22&c=33";
preg_match('/b=([^&]*)/is', $str, $s); 
//echo $s[1];
}
echo (microtime(true) - START_TIME).'s';
?>

结果平均值:0.00377011299133s

 

2、不使用正则

<?php
define('START_TIME',microtime(true));
for($n=0;$n<1000;$n++) {
$str="http://localhost/aaa.php?a=12&b=22&c=33";
$s=parse_url($str);
$s=$s[query];
$s=explode("&", $s);
$s=$s[1];
$s=str_replace("b=","", $s);
//echo $s; 
}
echo (microtime(true) - START_TIME).'s';
?>

结果平均值:0.00953912734985s

 

还是可以看得出,在这个例子中使用正则还是比较有效率的,主要是代码少,并且正则没回朔,也就是正则的优化做得好。

不是说正则很不效率,要用就要好好地优化它。

end

上一篇: 使用DOM Document对象匹配所有的<a>标签   |   下一篇:我的rewrite» 标签: PHP验证 php函数 php过滤 php函数库

评论: