2011-08-25 4 views
0

결과를 객체로 반환하는 내 PHP rss 파서에 오프셋과 제한을 추가하는 방법은?, 지금 제가 갖고있는 내용입니다. 오프셋이나 제한이 없으며이를 어떻게 접근 할 것인가? 물론내 PHP rss 파서 오프셋 및 한도를 추가하는 방법?

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; 
    } 
} 

답변

1

Simpliest 방법

$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

카운터는 어떻습니까? 당신은 SimpleXMLElement::xpath을 사용할 수 있습니다 설정 오프셋/한계는

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

을 필요에 따라. 이렇게하면 물건을 계산하기 위해 모든 항목을 횡단 할 필요가 없습니다.

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; 
    }