Ray Ray - 7 months ago 46
PHP Question

how to limit foreach loop to four loops

Is it possible to limit this loop ..just to four loops?

I got this source on another post and it's working but i just need to limit the loop

$scraper = new DOMScraper();
$scraper->setSite('http://anywebsite.com/testig12.aspx')->setSource();
Class DOMScraper extends DOMDocument{
public $site;
private $source;
private $dom;

function __construct(){
libxml_use_internal_errors(true);
$this->preserveWhiteSpace = false;
$this->strictErrorChecking = false;
}

function setSite($site){
$this->site = $site;
return $this;
}

function setSource(){
if(empty($this->site))return 'Error: Missing $this->site,
use setSite() first';
$this->source = $this->get_data($this->site);
return $this;
}

function getInnerHTML($tag, $id=null, $nodeValue = false){
if(empty($this->site))return 'Error: Missing $this->source,
use setSource() first';
$this->loadHTML($this->source);
$tmp = $this->getElementsByTagName($tag);
$ret = null;
foreach ($tmp as $v){
if($id !== null){
$attr = explode('=',$id);
if($v->getAttribute($attr[0])==$attr[1]){
if($nodeValue == true){
$ret .= trim($v->nodeValue);
}else{
$ret .= $this->innerHTML($v);
}
}
}else{
if($nodeValue == true){
$ret .= trim($v->nodeValue);
}else{
$ret .= $this->innerHTML($v);
}
}
}
return $ret;
}

function innerHTML($dom){
$ret = "";
$nodes = $dom->childNodes;
foreach($nodes as $v){
$tmp = new DOMDocument();
$tmp->appendChild($tmp->importNode($v, true));
$ret .= trim($tmp->saveHTML());
}
return $ret;
}

function get_data($url){
if(function_exists('curl_init')){
$ch = curl_init();
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 5);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$data = curl_exec($ch);
curl_close($ch);
return $data;
}else{
return file_get_contents($url);
}
}
}
?>


then here is where i want to limit the display becouse not it scrap all the data from that site like 2000 records.. i want to load only latest 4

<?php echo '<div>'.$scraper->getInnerHTML('div','id=LeftDiv12').'</div>'; ?>


Thank you

Answer

Just use a dummy count variable like this:

$Count = 0;
foreach($Array as $Key => $Value){
    //your code

    $Count++;
    if ($Count == 4){
        break; //stop foreach loop after 4th loop
    }
}