注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

红尘若梦

生活的色彩

 
 
 

日志

 
 

Php巧妙计算文章内包含图片数量  

2016-05-04 15:37:47|  分类: 技术 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
页面展示经常会根据图片的数量而采用不同的布局办法,而图片数量有时要根据相应的新闻内容来取得。经常用的一种办法是采用正则表达式,相应代码如下:

preg_match_all("/<\s*img\s+[^>]*?src\s*=\s*(\'|\")(.*?)\\1[^>]*?\/?\s*>/i", $content, $matches); //这里如果想要知道有多少张图就可以使用sizeof($matches[1])

但这种办法效率非常低,其实还可以利用substr_count来判断图片的数量,其原因就是查找"<img"这个字符串的出现次数。

$imgcount1=substr_count($content,"<img"); //这里可以判断$content到底包含多少张图片

这个办法效率是高,不过也有一个问题存有,有些页面内容中"<img"未必全是小写的,可能夹杂着大小写, 这样判断图片的数量也不准确,所以还可以使用如下办法来取得相关图片数量。

$imgcount2=(strlen($content)-strlen(str_ireplace("<img","",$content)))/strlen("<img");

这里先使用str_ireplace来无视大小写替换img标签为"",再将原字符长度减去替换后的字符串长度,然后除以替换字符串长度,即可得到<img标签的次数,这样的话,无论img标签是否怎样写,取得的图片数量都可以说是准确的。
最后我们用代码来测试下。

<?php
$url = "http://593668.com";
$ch = curl_init();
curl_setopt ($ch, CURLOPT_URL, $url);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT,10);
$content = curl_exec($ch);
preg_match_all("/<\s*img\s+[^>]*?src\s*=\s*(\'|\")(.*?)\\1[^>]*?\/?\s*>/i", $content, $matches);
$imgcount1=substr_count($content,"<img");
$imgcount2=(strlen($content)-strlen(str_ireplace("<img","",$content)))/strlen("<img");
echo "第一种方法:".sizeof($matches[1])."<br />";
echo "第二种方法:".$imgcount1."<br />";
echo "第三种方法:".$imgcount2."<br />";

?>

如果页面img标签并没有大小写混用的话,得出的图片数字一般都是一致的,如果页面img标签是大小写混用,那么第一种和第三种都可以得出正确的数字,但是第二种就会出错。如果是兼顾效率和准确,那么推荐使用第三种。
  评论这张
 
阅读(63)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017