首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何添加偏移量和限制到我的php rss解析器?

问如何添加偏移量和限制到我的php rss解析器?
EN

Stack Overflow用户
提问于 2011-08-25 15:18:00
回答 3查看 624关注 0票数 0

如何向我的PHP rss解析器添加偏移量和限制,以便将结果作为对象返回?它没有偏移量,也没有限制,该如何处理呢?

代码语言:javascript
复制
    class Rss
{
     /*
     *@access public
     *@params url,int ''=default,int ''=default
     *@usage input url,offset and limit,
     *@returns content based onf the offset/limit input
     */
    public function getFeed($url,$offset='',$limit=''){
        $object = array();
        $rss = simplexml_load_file($url);
      foreach($rss->channel->item as $item){
          $object[] = $item->title;
          $object[] = $item->description;
          $object[] = $item->link;
      }
     return $object;
   }
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-08-25 15:24:46

最简单的方法

代码语言:javascript
复制
$limit = 10; $offset = 5; 
$i=0; $taken=0;
foreach($rss->channel->item as $item){
    if ($i>=$offset && $taken<$limit){
        ++$taken;
        $object[] = $item->title;
        $object[] = $item->description;
        $object[] = $item->link;
    }
    //little optimization here
    if ($taken == $limit)
        break;
    ++$i;
}

当然,您可以将$limit和$offset存储为对象属性,或者从其他地方获取它们。

票数 1
EN

Stack Overflow用户

发布于 2011-08-25 15:25:35

单个计数器怎么样?根据需要设置偏移/限制

代码语言:javascript
复制
public function getFeed($url,$offset='',$limit=''){
    $object = array();
    $rss = simplexml_load_file($url);
    $offset = 3; $limit = 8; $counter = 0;
  foreach($rss->channel->item as $item){
      $counter++;
      if ($counter > $offset && $counter < $limit) {
        $object[] = $item->title;
        $object[] = $item->description;
        $object[] = $item->link;
      }
  }
 return $object;

}

票数 1
EN

Stack Overflow用户

发布于 2011-08-25 15:40:52

您可以使用SimpleXMLElement::xpath。这样你就不需要遍历所有的项目,只为了计算东西。

代码语言:javascript
复制
  public function getFeed($url, $offset = 1, $limit = -1){
    $object = array();
    $rss = simplexml_load_file($url);

    $limitCriteria = '';
    if ($limit > 0) {
      $limitCriteria = 'and position() <= ' . ((int)$offset + (int)$limit + 1);
    }

    foreach($rss->xpath(sprintf('//item[position() >= %s %s]', (int)$offset, $limitCriteria)) as $item){
      $object[] = $item->title;
      $object[] = $item->description;
      $object[] = $item->link;
    }

    return $object;
  }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7186473

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档