【发布时间】:2011-11-01 20:31:46
【问题描述】:
我正在尝试从一堆网页中提取链接并在表格中报告它们。我有这个函数,get_links($pageId),应该是获取页面内容,拉出每个锚标签的values和href属性。
function get_links($pageId) {
$page_contents = file_get_contents('http://www.mysite.com/?p='.$pageId);
$html = new DOMDocument();
@$html->loadHTML($page_contents);
$anchors = $html->getElementsByTagName('a');
$link_array = array();
foreach($anchors as $anchor) {
if (!empty($anchor->nodeValue)) {
$text = $anchor->nodeValue;
$link = $anchor->getAttribute('href');
$link_array[$text] = $link;
}
}
return $link_array;
}
当我在其中一个页面上运行此函数时,它什么也不返回。例如,如果我调用:
$page_links = get_links('someId');
foreach($page_links as $text->$link) {
//my print functions
};
我收到 foreach 行的“致命错误:无法访问空属性”。
在 foreach($anchors) 循环中回显 $text 和 $link 可以正常工作。在循环之后回显来自 $link_array 的值也是如此。但是回显 keys 不会。如果我在循环之后立即进行此测试:
foreach($link_array as $text->$link) {echo $text;}
我收到此错误:“可捕获的致命错误:stdClass 类的对象无法转换为字符串。”
为什么它在循环过程中打印正常,但当我将它放入数组中返回时被视为对象?
【问题讨论】: