由于部分文章内容较长。所以要用到长文章分页功能。插入分隔符,然后用explode切割成数组输出。但我现在遇到一个问题。如果我在后台只需要获得文章总页数的时候。用explode来获得下标的方法来计算。那效率很慢。如果我只想获得一个字符串中自定义分隔符出现的次数。用什么函数最快,占用资源最少,最好用?

解决方案 »

  1.   

    你是说搜索某个字符串出现的次数? substr_count()
    另外拆分字符串也可以考虑 str_split()
      

  2.   

    这么说把。下面两个办法都能得到要的结果。但哪个效率更好一些呢。或者还有其他效率更高的办法没有
    <?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));?>
      

  3.   

    当然是 substr_count
    只需遍历一遍字符串,并计数explode 遍历一遍数据库,按区段保存内容到数组
    count 遍历一遍数组,并计数第二种方法还需要至少与原字符串一样大的缓存空间
      

  4.   

    这里有个分页类,你看看,如果存在数据库里面的话,稍微改一下,加一些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>&nbsp;";
    }else{
    $pageListStr.="<a href='".$this->url.$i."'>".$i."&nbsp;</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>";