Php 如何将foreach循环限制为四个循环
可以把这个循环限制在四个循环吗 我在另一篇文章中得到了这个来源,它正在工作,但我只需要限制循环Php 如何将foreach循环限制为四个循环,php,Php,可以把这个循环限制在四个循环吗 我在另一篇文章中得到了这个来源,它正在工作,但我只需要限制循环 $scraper = new DOMScraper(); $scraper->setSite('http://anywebsite.com/testig12.aspx')->setSource(); Class DOMScraper extends DOMDocument{ public $site; priva
$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);
}
}
}
?>
然后这里是我想限制显示的地方,因为它不会像2000条记录那样从该站点删除所有数据。。我只想加载最新的4
<?php echo '<div>'.$scraper->getInnerHTML('div','id=LeftDiv12').'</div>'; ?>
谢谢只需使用如下伪计数变量:
$Count = 0;
foreach($Array as $Key => $Value){
//your code
$Count++;
if ($Count == 4){
break; //stop foreach loop after 4th loop
}
}
只需使用如下虚拟计数变量:
$Count = 0;
foreach($Array as $Key => $Value){
//your code
$Count++;
if ($Count == 4){
break; //stop foreach loop after 4th loop
}
}
可以用来限制foreach循环的一种方法是在foreach循环之外创建一个变量,并在每次运行to循环时向该变量添加一个变量。然后在一定的时间后打破循环。我已经修改了你的函数来做我上面描述的事情
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;
$i = 0;
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);
}
}
if(++$i > 4) break;
}
return $ret;
}
可以用来限制foreach循环的一种方法是在foreach循环之外创建一个变量,并在每次运行to循环时向该变量添加一个变量。然后在一定的时间后打破循环。我已经修改了你的函数来做我上面描述的事情
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;
$i = 0;
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);
}
}
if(++$i > 4) break;
}
return $ret;
}
不确定所指的是哪个循环,但可以在循环外部创建一个计数器,然后在循环内部递增。在计数器>=4上包含中断的if语句
$counter = 0;
foreach($nodes as $v){
if($counter>=4){
break;
}
$tmp = new DOMDocument();
$tmp->appendChild($tmp->importNode($v, true));
$ret .= trim($tmp->saveHTML());
$counter++;}
可能有点笨拙,但它会完成工作。不确定您指的是哪个循环,但您可以在循环外创建一个计数器,然后在循环内递增。在计数器>=4上包含中断的if语句
$counter = 0;
foreach($nodes as $v){
if($counter>=4){
break;
}
$tmp = new DOMDocument();
$tmp->appendChild($tmp->importNode($v, true));
$ret .= trim($tmp->saveHTML());
$counter++;}
可能有点笨拙,但它会完成工作。您应该使用for循环而不是foreach循环;)。你能给我解释清楚吗?谢谢你的重播^不是每次都合适。使变量在每次循环中增加,并在达到所需值时中断。您可以在此处检查其工作原理:。您还将了解foreach循环是如何生成的。您可以使用一个计数器变量,并在循环内检查其值(在其开始处),如果它等于4,则中断循环,否则将其增加1。您应该使用foreach循环而不是foreach循环;)。你能给我解释清楚吗?谢谢你的重播^不是每次都合适。使变量在每次循环中增加,并在达到所需值时中断。您可以在此处检查其工作原理:。您还将了解foreach循环是如何生成的。您可以使用一个计数器变量并在循环内(在其开始处)检查其值,如果它等于4,则中断循环,否则将其增加1。感谢您的帮助,然而,我不知道为什么它显示空白页后,我与你的编辑code@Ray这意味着有四个div中没有内容,试着将其设置为100,看看是否有任何显示。你使用的是包含内容的URL吗?谢谢你的帮助,但是我不知道为什么我用你的URL编辑后会显示空白页面code@Ray这意味着有四个div中没有内容,试着将其设置为100,看看是否有任何显示。您使用的是包含内容的URL吗?