服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - PHP教程 - php采集速度探究总结

php采集速度探究总结

2019-10-29 15:20php教程网 PHP教程

这个以前有人发帖子研究过了,但是之后只是说出了哪个函数快并没有总结,研究问题的目的是要总结方法。

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

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

  1. function str_cut($str ,$start$end) {//取出第一个匹配,效率最高,先分割再替换  
  2. $content = strstr$str$start );  
  3. $content = substr$contentstrlen$start ), strpos$content$end ) - strlen$start ) );  
  4. return $content;  
  5. }  
  6. function str_cut1($str ,$start$end) {//取出第一个匹配,效率中,直接查找替换  
  7. $x = strpos($str$start);  
  8. return substr($str$x+strlen($start), strpos($str$end)-$x+strlen($end));  
  9. }  
  10.  
  11. function str_cut3($content,$start,$end){//取出第一个匹配,字符串越大,速度越慢!  
  12. $my = explode($start,$content);  
  13. $my = explode($end,$my[1]);  
  14. return $my[0];  
  15. }  


以下为取出所有匹配的3个函数(全部原创),实现相同的采集目的 

  1. function strcut($str ,$start$end//先搜个数,速度中等  
  2. {  
  3.     ifstrpos$str , $start ) )  
  4.     {  
  5.             $sum = substr_count($str,$start);  
  6.  
  7.             $carr = array();  
  8.             for($i=0;$i<$sum;$i++){  
  9.                 $str = strstr$str$start );  
  10.                 $str = substr$strstrlen($start));  
  11.                    $carr[] = substr$str, 0, strpos$str$end ) );  
  12.             }  
  13.  
  14.             
  15.  
  16.     }  
  17.     return $carr;  
  18. }  
  19.  
  20. function str_cut_all($str ,$start$end,$carr=array()) //递归,运行效率最慢!  
  21. {  
  22.     ifstrpos$str , $start ) )  
  23.     {  
  24.             $str = strstr$str$start );  
  25.             $str = substr$strstrlen($start));  
  26.                $carr[] = substr$str, 0, strpos$str$end ) );  
  27.                ifstrpos$str , $start ) )  
  28.             {  
  29.                    return str_cut_all($str ,$start$end ,$carr );  
  30.                }  
  31.  
  32.     }  
  33.     return $carr;  
  34. }  
  35.  
  36. function my_Ca($content,$start,$end){//取出所有匹配,效率最快,因为只读一次,字符串越大越明显  
  37.     $m = explode($start,$content);  
  38.     $a = array();  
  39.     for$i = 1;$i < count($m);$i++ )  
  40.     {  
  41.         $my = explode($end,$m[$i]);  
  42.         $a[] = $my[0];  
  43.         unset($my);  
  44.     }  
  45.     return $a;  
  46. }  

注意my-Ca比较 
如果这样写: 

  1. function my_Ca($content,$start,$end){//取出所有匹配  
  2. $m = explode($start,$content);  
  3. $a = array();  
  4. $sum = count($m);  
  5. for$i = 1;$i < $sum;$i++ )  
  6. {  
  7. $my = explode($end,$m[$i]);  
  8. $a[] = $my[0];  
  9. unset($my);  
  10. }  
  11. return $a;  
  12. }  


速度又快了一些! 

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

延伸 · 阅读

精彩推荐