长文章分页效率问题 由于部分文章内容较长。所以要用到长文章分页功能。插入分隔符,然后用explode切割成数组输出。但我现在遇到一个问题。如果我在后台只需要获得文章总页数的时候。用explode来获得下标的方法来计算。那效率很慢。如果我只想获得一个字符串中自定义分隔符出现的次数。用什么函数最快,占用资源最少,最好用? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 你是说搜索某个字符串出现的次数? substr_count()另外拆分字符串也可以考虑 str_split() 这么说把。下面两个办法都能得到要的结果。但哪个效率更好一些呢。或者还有其他效率更高的办法没有<?php$a='asdfasf saf|||sdfsdfsdfsd|||fsdfsdfsd fs|||df sf sdfsaf s|||daf sad ';//echo preg_match_all('/.*\|\|\|/',$a,$b);//print_r($b);$a='ssssssssssssss|||ssssssssss';echo substr_count($a,'|||')+1;echo count(explode('|||',$a));?> 当然是 substr_count只需遍历一遍字符串,并计数explode 遍历一遍数据库,按区段保存内容到数组count 遍历一遍数组,并计数第二种方法还需要至少与原字符串一样大的缓存空间 这里有个分页类,你看看,如果存在数据库里面的话,稍微改一下,加一些CSS就可以// 首页 上一页 1 2 3 4 5 下一页 末页class StrPage{ private $file;//文件内容 private $current;//当前页 private $totalPage;//总的页数 private $url;//url地址 private $pageLen;//每页显示的内容长度 function __construct($file,$len=500){ $this->file = file_get_contents($file); $this->current=isset($_GET['page'])?$_GET['page']:1; $this->pageLen = $len; $this->totalPage = $this->getTotalPage(); $this->url= $this->getUrl(); } private function getTotalPage(){ return ceil(strlen($this->file)/$this->pageLen); } private function getUrl(){ $url =parse_url($_SERVER['REQUEST_URI']); parse_str($url['query'],$queryArr); unset($queryArr['page']); $queryStr = http_build_query($queryArr); return $url['path'].'?'.$queryStr.'&page='; } private function first(){ if($this->current>1)return "<a href='".$this->url."1'>首页</a>"; } private function pre(){ if($this->current>1)return "<a href='".$this->url.($this->current-1)."'>上一页</a>"; } private function next(){ if($this->current<$this->totalPage)return "<a href='".$this->url.($this->current+1)."'>下一页</a>"; } private function end(){ if($this->current<$this->totalPage) return "<a href='".$this->url.$this->totalPage."'>末页</a>"; } private function pageList(){ for ($i=1;$i<=$this->totalPage;$i++){ if($i==$this->current){ $pageListStr.="<span style='font-size:20px;color:#f00'>".$i."</span> "; }else{ $pageListStr.="<a href='".$this->url.$i."'>".$i." </a>"; } } return $pageListStr; } public function pageStyle($style=1){ switch ($style){ case 1: return "共有".$this->totalPage."页".$this->first().$this->pre().$this->pageList().$this->next().$this->end(); break; case 2; return $this->pageList(); break; } } public function getContents(){ $prePageLen = strlen($this->subStrs($this->current-1)); $currentPageLen = strlen($this->subStrs($this->current)); return substr($this->file, $prePageLen,$currentPageLen-$prePageLen); } private function subStrs($page){ $len= $page*$this->pageLen; for ($i = 0; $i < $len; $i++) { if(ord(substr($this->file,$i,1))>0xa0){ $string.=substr($this->file,$i,2); $i++; }else{ $string.=substr($this->file,$i,1); } } return $string; }}$php = new StrPage('75.txt',2000);echo "<div style='font-size:14px;line-height:1.8em;color:#666;padding:6px;width:960px;height:450px;'>".$php->getContents()."</div>";echo "<div style='border:solid 1px #ccc;font-size:14px;color:#333'>";echo $php->pageStyle();echo "</div>"; what's strange? include_once引用的问题 PHP图片上传不上去,出现警告! 关于session登陆并得到当前登陆人id PHP中 怎么获得客户端的ip 地址啊? form提交问题 在线待待 请问如何让PHP连接文件型ACCESS数据库? 关于split函数 在LINUX上怎么安装PHP! php程序显示图片的问题,高分求教 怎么使在网页上点击退出登录后,清除session呢?求教! [PHP]将JSON模型的数据,替换成JSON数据
另外拆分字符串也可以考虑 str_split()
<?php
$a='asdfasf saf|||sdfsdfsdfsd|||fsdfsdfsd fs|||df sf sdfsaf s|||daf sad ';//echo preg_match_all('/.*\|\|\|/',$a,$b);//print_r($b);
$a='ssssssssssssss|||ssssssssss';
echo substr_count($a,'|||')+1;echo count(explode('|||',$a));?>
只需遍历一遍字符串,并计数explode 遍历一遍数据库,按区段保存内容到数组
count 遍历一遍数组,并计数第二种方法还需要至少与原字符串一样大的缓存空间
// 首页 上一页 1 2 3 4 5 下一页 末页
class StrPage{
private $file;//文件内容
private $current;//当前页
private $totalPage;//总的页数
private $url;//url地址
private $pageLen;//每页显示的内容长度
function __construct($file,$len=500){
$this->file = file_get_contents($file);
$this->current=isset($_GET['page'])?$_GET['page']:1;
$this->pageLen = $len;
$this->totalPage = $this->getTotalPage();
$this->url= $this->getUrl();
}
private function getTotalPage(){
return ceil(strlen($this->file)/$this->pageLen);
}
private function getUrl(){
$url =parse_url($_SERVER['REQUEST_URI']);
parse_str($url['query'],$queryArr);
unset($queryArr['page']);
$queryStr = http_build_query($queryArr);
return $url['path'].'?'.$queryStr.'&page=';
}
private function first(){
if($this->current>1)return "<a href='".$this->url."1'>首页</a>";
}
private function pre(){
if($this->current>1)return "<a href='".$this->url.($this->current-1)."'>上一页</a>";
}
private function next(){
if($this->current<$this->totalPage)return "<a href='".$this->url.($this->current+1)."'>下一页</a>";
}
private function end(){
if($this->current<$this->totalPage) return "<a href='".$this->url.$this->totalPage."'>末页</a>";
}
private function pageList(){
for ($i=1;$i<=$this->totalPage;$i++){
if($i==$this->current){
$pageListStr.="<span style='font-size:20px;color:#f00'>".$i."</span> ";
}else{
$pageListStr.="<a href='".$this->url.$i."'>".$i." </a>";
}
}
return $pageListStr;
}
public function pageStyle($style=1){
switch ($style){
case 1:
return "共有".$this->totalPage."页".$this->first().$this->pre().$this->pageList().$this->next().$this->end();
break;
case 2;
return $this->pageList();
break;
}
}
public function getContents(){
$prePageLen = strlen($this->subStrs($this->current-1));
$currentPageLen = strlen($this->subStrs($this->current));
return substr($this->file, $prePageLen,$currentPageLen-$prePageLen);
}
private function subStrs($page){
$len= $page*$this->pageLen;
for ($i = 0; $i < $len; $i++) {
if(ord(substr($this->file,$i,1))>0xa0){
$string.=substr($this->file,$i,2);
$i++;
}else{
$string.=substr($this->file,$i,1);
}
}
return $string;
}
}
$php = new StrPage('75.txt',2000);
echo "<div style='font-size:14px;line-height:1.8em;color:#666;padding:6px;width:960px;height:450px;'>".$php->getContents()."</div>";
echo "<div style='border:solid 1px #ccc;font-size:14px;color:#333'>";
echo $php->pageStyle();
echo "</div>";