致命错误:在数组

时间:2018-06-01 13:28:51

标签: php html dom

这是一个PHP代码,必须从网页获取信息并回显它。 在网页上有3个div,其类名是" skaties-starfm-songs-column"在每一个中都有一个ul。我的目标是回应第一个" skaties-starfm-songs-column"中所有的li。但我不知道该怎么做。

网页html代码: 我不能将这个作为代码发布,因为在其内部是巨人。

enter image description here

<?php 

include_once 'includes/db.inc.php';
include_once 'includes/simple_html_dom.php';
include_once 'includes/curl_init.php';
$html=curl_get('https://skaties.lv/starfm/dziesmu-top/');
$dom = new DOMDocument();
$dom = str_get_html($html);
$songs=$dom->find('.skaties-starfm-songs-column');
foreach ($songs->getElementsByTagName('ul')->getElementsByTagName('li') as $a) {
    echo $a;
}
<?

此代码发布和错误&#34;致命错误:在数组&#34;上调用成员函数getElementsByTagName()。

<?php 

include_once 'includes/db.inc.php';
include_once 'includes/simple_html_dom.php';
include_once 'includes/curl_init.php';
$html=curl_get('https://skaties.lv/starfm/dziesmu-top/');
$dom = new DOMDocument();
$dom = str_get_html($html);
$songs=$dom->find('.skaties-starfm-songs-column');
foreach ($songs as $a) {
    echo $a;
}
?>

这段代码回应了所有3个div,里面包含了所有内容。

1 个答案:

答案 0 :(得分:0)

显然,$ songs是一系列div。如果你只需要第一个,那么使用索引:

$songs[0]->getElementsByTagName('ul');

在此之前检查$ songs数组是否为空是个好主意:

if (!empty($songs)) {
    $songs[0]->getElementsByTagName('ul');
}

请注意, DOMDocument :: getElementsByTagName 方法返回类似集合的DOMNodeList对象。因此,如果您想要一些特定的,那么您应该使用DOMNodeList::item方法:

$myLists = $songs[0]->getElementsByTagName('ul');

// get only the first UL element
$firstList = $myLists->item(0);
foreach ($firstList->getElementsByTagName('li') as $a) {
    echo $a;
}

// or walk through all of them
foreach ($myLists as $list) {
    foreach ($list->getElementsByTagName('li') as $a) {
        echo $a;
    }
}