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程序员工具
May 26 PHP
UCenter中的一个可逆加密函数authcode函数代码
Jul 20 PHP
浅析PHP安装扩展mcrypt以及相关依赖项(PHP安装PECL扩展的方法)
Jul 05 PHP
php实例分享之二维数组排序
May 15 PHP
简单实用的网站PHP缓存类实例
Jul 18 PHP
配置php.ini实现PHP文件上传功能
Nov 27 PHP
php实现用已经过去多长时间的方式显示时间
Jun 05 PHP
eclipse php wamp配置教程
Jun 30 PHP
CI框架封装的常用图像处理方法(缩略图,水印,旋转,上传等)
Nov 22 PHP
phpMyAdmin无法登陆的解决方法
Apr 27 PHP
PHP Post获取不到非表单数据的问题解决办法
Feb 27 PHP
thinkphp5 框架结合plupload实现图片批量上传功能示例
Apr 04 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的swoole扩展安装方法详细教程
2016/05/18 PHP
PHP常用正则表达式精选(推荐)
2019/05/28 PHP
JS Timing
2007/04/21 Javascript
脚本安需导入(装载)的三种模式的对比
2007/06/24 Javascript
JavaScript 事件参考手册
2008/12/24 Javascript
Extjs学习笔记之七 布局
2010/01/08 Javascript
JS获取浏览器语言动态加载JS文件示例代码
2014/10/31 Javascript
浅谈javascript中自定义模版
2015/01/29 Javascript
javascript 数组的定义和数组的长度
2016/06/07 Javascript
微信小程序 location API实例详解
2016/10/02 Javascript
javascript入门之window对象【新手必看】
2016/11/22 Javascript
详解js中常规日期格式处理、月历渲染和倒计时函数
2016/12/28 Javascript
angularjs实现上拉加载和下拉刷新数据功能
2017/06/12 Javascript
详解Vue.use自定义自己的全局组件
2017/06/14 Javascript
jquery实现左右轮播切换效果
2018/01/01 jQuery
JS实现简单获取最近7天和最近3天日期的方法
2018/04/18 Javascript
python开发之thread实现布朗运动的方法
2015/11/11 Python
回调函数的意义以及python实现实例
2017/06/20 Python
matplotlib绘制动画代码示例
2018/01/02 Python
分析python动态规划的递归、非递归实现
2018/03/04 Python
Flask框架URL管理操作示例【基于@app.route】
2018/07/23 Python
matplotlib命令与格式之tick坐标轴日期格式(设置日期主副刻度)
2019/08/06 Python
python实现图片插入文字
2019/11/26 Python
Django models filter筛选条件详解
2020/03/16 Python
django template实现定义临时变量,自定义赋值、自增实例
2020/07/12 Python
Python爬虫使用bs4方法实现数据解析
2020/08/25 Python
HTML中meta标签及Keywords
2020/04/15 HTML / CSS
车辆维修工自我评价怎么写
2013/09/20 职场文书
结构工程研究生求职信
2013/10/13 职场文书
实习生的自我评价
2014/01/08 职场文书
毕业生求职信
2014/06/10 职场文书
工厂仓管员岗位职责范本
2014/07/17 职场文书
2015年幼儿园卫生保健工作总结
2015/05/12 职场文书
pytorch 带batch的tensor类型图像显示操作
2021/05/20 Python
Python趣味爬虫之用Python实现智慧校园一键评教
2021/05/28 Python
Win11远程连接不上怎么办?Win11远程桌面用不了的解决方法
2022/08/05 数码科技