domcrawler循环和if语句检查类是否存在

时间:2015-07-09 00:01:13

标签: api symfony loops if-statement domcrawler

您好我在使用DomCrawler遇到了一个小问题。我正在抓取一个页面,它的div类为.icon3d。我想浏览页面,对于该类的每个div,我将向数组添加一个"3D"项,没有它的每个div我将添加一个"2D"项。这是我到目前为止的代码。

for ($i=0; $i < 10; $i++) { 
    $divs =  $crawler->filter('div.icon3d');
        if(count($divs)){
            $type[] = '3D';
        }else{
            $type[] = '2D';
        }
    }

2 个答案:

答案 0 :(得分:3)

首先检查The DomCrawler Component文档。 filter方法返回已过滤的节点列表,因此通过调用->filter('div.icon3d')返回的值将列出具有div类的所有icon3d元素。

首先,您需要查找所有div元素,循环显示它们,并根据3D css类存在,将2Dicon3d添加到数组中。

$divs = $crawler->filter('div');
foreach ($divs as $node) {
    $type[] = (false !== strpos($node->getAttribute('class'), 'icon3d')) ? '3D' : '2D';
}

<强>更新

$crawler->filter('a')->each(function(Crawler $a) {
    $div = $a->filter('div');
    // Div exists
    if ($div->count()) {

    }
});

要使用抓取器节点类

$div->getNode(0)->getAttribute('class')

答案 1 :(得分:0)

我明白了。这是我使用的代码。我确信有一种更清洁的方式。

$divs = $crawler->filter('#schedule li a')->each(function($node){
    if ($node->children()->last()->attr('class') == 'icon3d') {
        return '3D';
    }else{
        return '2D';
    }
});