首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将foreach循环限制为四个循环

如何将foreach循环限制为四个循环
EN

Stack Overflow用户
提问于 2016-04-30 19:32:59
回答 3查看 6.2K关注 0票数 0

可以将这个循环..just限制为四个循环吗?

我在另一篇文章中找到了这个消息源,它正在工作,但我只需要限制循环

代码语言:javascript
复制
        $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

代码语言:javascript
复制
 <?php echo '<div>'.$scraper->getInnerHTML('div','id=LeftDiv12').'</div>'; ?>

谢谢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-04-30 19:41:01

只需使用这样的虚拟计数变量:

代码语言:javascript
复制
$Count = 0;
foreach($Array as $Key => $Value){
    //your code

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

Stack Overflow用户

发布于 2016-04-30 19:41:18

限制foreach循环的一种方法是在foreach循环之外创建一个变量,并在每次运行循环时向变量添加一个变量。然后,在一定次数后,从循环中脱离出来。我已经修改了您的功能,以完成我前面描述的功能。

代码语言:javascript
复制
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;
}
票数 0
EN

Stack Overflow用户

发布于 2016-04-30 19:45:26

不确定您所指的是哪个循环,但您可以在循环之外创建一个计数器,然后在循环中进行增量。包含在计数器>=4上中断的if语句

代码语言:javascript
复制
$counter = 0;
foreach($nodes as $v){
if($counter>=4){
    break;
}   
$tmp = new DOMDocument();
$tmp->appendChild($tmp->importNode($v, true));
$ret .= trim($tmp->saveHTML());
$counter++;}

也许有点排他性,但会完成任务的。

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

https://stackoverflow.com/questions/36959314

复制
相关文章

相似问题

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