Php Symfony DOMCrawler从每个

Php Symfony DOMCrawler从每个,php,symfony,domcrawler,Php,Symfony,Domcrawler,我试图用DOMCrawler过滤我的html,但如果找到结果,我需要中断 是否可以从每个中断? 或者如何获取$node->text()如果我使用foreach?还是不可能 HTML: 我想获得地位。然后,若状态等于“活动”,我想中断循环 好吧,现在我想出了一个办法 $crawler = $crawler->filter('#ctl00_MainContent_objSearchGrid_dgCorpSearchResults'); foreach ($crawler as $i =>

我试图用DOMCrawler过滤我的html,但如果找到结果,我需要中断

是否可以从
每个
中断?
或者如何获取
$node->text()如果我使用
foreach
?还是不可能

HTML:

我想获得地位。然后,若状态等于“活动”,我想中断循环


好吧,现在我想出了一个办法

$crawler = $crawler->filter('#ctl00_MainContent_objSearchGrid_dgCorpSearchResults');
foreach ($crawler as $i => $content) {
    $crawler = new Crawler($content);
    foreach ($crawler->filter('#ctl00_MainContent_objSearchGrid_dgCorpSearchResults') as $node) {
        $longStatus = $node->nodeValue;
        echo $longStatus;
    }
}

但是现在我不知道如何在

中只获得第三个
,而你不能从
$crawler->each()
中中断,当然你不能使用
中断
退出函数,并且你不能返回任何东西,因此
$crawler->each()
将停止迭代,但你还有几个选择

  • 例外情况
    退出大多数函数始终是一个选项
  • foreach

    当您自己得到它时,您可以从
    $crawler->each()
    切换到
    foreach
    。 但这比你想象的要简单。替换
    $crawler->each(function($element) {
       your_code();
    });
    
    具有 无需更改代码中的任何内容。您的原始代码变成
    ...
    foreach($crawler->filter('table tr') as $context) {
        $element = new Crawler($content);
        $status = $element->filter('td')->eq(2)->text();
        echo $status;
        if ($status == 'Active') {
            $this->available = false;
            break;
        }
     }
    
    你仍然可以用同样的方法获得第三个

  • 看起来不可能。你能给出一个示例文档并描述你想要得到的结果吗?@xabbuh嘿,更新了我的问题。你是否尝试返回而不是中断?是的,这是我尝试的第一个。它只是打印所有结果,而不是破坏结果。
    $crawler->each(function($element) {
       your_code();
    });
    
    foreach($crawler as $content) {
        $element = new Crawler($content);
        your_code();
    }
    
    ...
    foreach($crawler->filter('table tr') as $context) {
        $element = new Crawler($content);
        $status = $element->filter('td')->eq(2)->text();
        echo $status;
        if ($status == 'Active') {
            $this->available = false;
            break;
        }
     }