php不用正则采集速度探究总结


Posted in PHP onMarch 24, 2008

 
注意:下面的所有函数都没有用正则。

以上为取出第一个匹配的三个函数,实现相同的目的

function str_cut($str ,$start, $end) {//取出第一个匹配,效率最高,先分割再替换  
$content = strstr( $str, $start );  
$content = substr( $content, strlen( $start ), strpos( $content, $end ) - strlen( $start ) );  
return $content;  
}  
function str_cut1($str ,$start, $end) {//取出第一个匹配,效率中,直接查找替换  
$x = strpos($str, $start);  
return substr($str, $x+strlen($start), strpos($str, $end)-$x+strlen($end));  
}  function str_cut3($content,$start,$end){//取出第一个匹配,字符串越大,速度越慢!  
$my = explode($start,$content);  
$my = explode($end,$my[1]);  
return $my[0];  
} 

以下为取出所有匹配的3个函数(全部原创),实现相同的采集目的
function strcut($str ,$start, $end) //先搜个数,速度中等  
{  
    if( strpos( $str , $start ) )  
    {  
            $sum = substr_count($str,$start);              $carr = array();  
            for($i=0;$i<$sum;$i++){  
                $str = strstr( $str, $start );  
                $str = substr( $str, strlen($start));  
                   $carr[] = substr( $str, 0, strpos( $str, $end ) );  
            }  
            
    }  
    return $carr;  
}  
function str_cut_all($str ,$start, $end,$carr=array()) //递归,运行效率最慢!  
{  
    if( strpos( $str , $start ) )  
    {  
            $str = strstr( $str, $start );  
            $str = substr( $str, strlen($start));  
               $carr[] = substr( $str, 0, strpos( $str, $end ) );  
               if( strpos( $str , $start ) )  
            {  
                   return str_cut_all($str ,$start, $end ,$carr );  
               }  
    }  
    return $carr;  
}  
function my_Ca($content,$start,$end){//取出所有匹配,效率最快,因为只读一次,字符串越大越明显  
    $m = explode($start,$content);  
    $a = array();  
    for( $i = 1;$i < count($m);$i++ )  
    {  
        $my = explode($end,$m[$i]);  
        $a[] = $my[0];  
        unset($my);  
    }  
    return $a;  
} 

注意my-Ca比较
如果这样写:
function my_Ca($content,$start,$end){//取出所有匹配  
$m = explode($start,$content);  
$a = array();  
$sum = count($m);  
for( $i = 1;$i < $sum;$i++ )  
{  
$my = explode($end,$m[$i]);  
$a[] = $my[0];  
unset($my);  
}  
return $a;  
} 

速度又快了一些!

由上可以看出,并不是数组处理函数(explode)比字符串处理函数(substr等)慢,也不是那个比这个快,因为在匹配多个数据的时候匹配的越多数组函数的优势越大,处理字符串就象切蛋糕一样越切越小。匹配单个字符串运用切的思路去做也是一样的效果(str_cut)。关键还是在---算法!算法写的好,什么函数都是一样哦!

PHP 相关文章推荐
php下将XML转换为数组
Jan 01 PHP
php获取mysql数据库中的所有表名的代码
Apr 23 PHP
php XPath对XML文件查找及修改实现代码
Jul 27 PHP
ThinkPHP惯例配置文件详解
Jul 14 PHP
php中限制ip段访问、禁止ip提交表单的代码分享
Aug 22 PHP
thinkPHP实现表单自动验证
Dec 24 PHP
浅析PHP中Session可能会引起并发问题
Jul 23 PHP
PHP代码判断设备是手机还是平板电脑(两种方法)
Oct 19 PHP
使用PHP json_decode可能遇到的坑与解决方法
Aug 03 PHP
PHP addslashes()函数讲解
Feb 03 PHP
在 Laravel 项目中使用 webpack-encore的方法
Jul 21 PHP
php实现QQ小程序发送模板消息功能
Sep 18 PHP
php木马攻击防御之道
Mar 24 #PHP
php入门小知识
Mar 24 #PHP
PHP 实例化类的一点摘记
Mar 23 #PHP
深思 PHP 数组遍历的差异(array_diff 的实现)
Mar 23 #PHP
附件名前加网站名
Mar 23 #PHP
由php if 想到的些问题
Mar 22 #PHP
php实现mysql数据库备份类
Mar 20 #PHP
You might like
功能齐全的PHP发送邮件类代码附详细说明
2008/07/10 PHP
PHP 7.1中AES加解密方法mcrypt_module_open()的替换方案
2017/10/17 PHP
4种Windows系统下Laravel框架的开发环境安装及部署方法详解
2020/04/06 PHP
小议Function.apply() 之一------(函数的劫持与对象的复制)
2006/11/30 Javascript
jquery中ajax学习笔记一
2011/10/16 Javascript
深入理解JavaScript系列(7) S.O.L.I.D五大原则之开闭原则OCP
2012/01/15 Javascript
基于jquery的时间段实现代码
2012/08/02 Javascript
js函数返回多个返回值的示例代码
2013/11/05 Javascript
jquery简单实现滚动条下拉DIV固定在头部不动
2013/11/25 Javascript
js中的cookie的读写操作示例详解
2014/04/17 Javascript
js点击选择文本的方法
2015/02/09 Javascript
AngularJS教程之MVC体系结构详解
2016/08/16 Javascript
NodeJS处理Express中异步错误
2017/03/26 NodeJs
Angular中ng-bind和ng-model的区别实例详解
2017/04/10 Javascript
jQuery简单绑定单个事件的方法示例
2017/06/10 jQuery
深入探究node之Transform
2017/07/20 Javascript
mint-ui的search组件在键盘显示搜索按钮的实现方法
2017/10/27 Javascript
详解ES6语法之可迭代协议和迭代器协议
2018/01/13 Javascript
详解vue静态资源打包中的坑与解决方案
2018/02/05 Javascript
JS/HTML5游戏常用算法之碰撞检测 包围盒检测算法详解【矩形情况】
2018/12/13 Javascript
浅谈小程序globalData的那些事儿
2019/11/01 Javascript
解决nuxt页面中mounted、created、watch执行两遍的问题
2020/11/05 Javascript
python使用in操作符时元组和数组的区别分析
2015/05/19 Python
在Python程序中操作文件之isatty()方法的使用教程
2015/05/24 Python
Python使用matplotlib实现绘制自定义图形功能示例
2018/01/18 Python
解读python logging模块的使用方法
2018/04/17 Python
Python错误处理操作示例
2018/07/18 Python
利用ctypes获取numpy数组的指针方法
2019/02/12 Python
tensorflow 动态获取 BatchSzie 的大小实例
2020/06/30 Python
python分布式爬虫中消息队列知识点详解
2020/11/26 Python
俄罗斯家居用品购物网站:Евродом
2020/11/21 全球购物
优秀教师工作感言
2014/02/16 职场文书
中学生教师节演讲稿
2014/09/03 职场文书
2014年妇联工作总结
2014/11/21 职场文书
意向协议书
2015/01/27 职场文书
JavaScript展开运算符和剩余运算符的区别详解
2022/02/18 Javascript