错误是由于PHP
变量的作用域,我有以下代码错误是由于PHP
function scraping_digg() {
// create HTML DOM
$html = file_get_html('http://digg.com/');
// get news block
foreach($html->find('div.news-summary') as $article) {
// get title
$item['title'] = trim($article->find('h3', 0)->plaintext);
// get details
$item['details'] = trim($article->find('p', 0)->plaintext);
// get intro
$item['diggs'] = trim($article->find('li a strong', 0)->plaintext);
$ret[] = $item;
}
// clean up memory
$html->clear();
unset($html);
return $ret;
}
当我运行它,我得到以下错误。
Undefined variable: ret in /opt/lampp/htdocs/web_scrapper/example/scraping/example_scraping_digg.php on line
我无法找到$ ret范围的修复程序。请帮忙。
在scraping_digg
功能的beggining声明变量:
$ret = array();
附加信息:http://php.net/manual/en/language.variables.scope.php – 2012-02-13 13:06:16
的行号将是最重要的信息!
$ret[] = $item;
此行可能会触发通知,在函数的开始加入类似
$ret=array();
其因$ret
是不确定的...
试试你的循环
之前宣布$ret
function scraping_digg() {
// create HTML DOM
$html = file_get_html('http://digg.com/');
$ret = array();
// get news block
foreach($html->find('div.news-summary') as $article) {
// get title
$item['title'] = trim($article->find('h3', 0)->plaintext);
// get details
$item['details'] = trim($article->find('p', 0)->plaintext);
// get intro
$item['diggs'] = trim($article->find('li a strong', 0)->plaintext);
$ret[] = $item;
}
// clean up memory
$html->clear();
unset($html);
return $ret;
}
我想你不会同时初始化功能范围内的和$item
。
function scraping_digg() {
// create HTML DOM
$html = file_get_html('http://digg.com/');
$ret = array();
// get news block
foreach($html->find('div.news-summary') as $article) {
$item = array();
// get title
$item['title'] = trim($article->find('h3', 0)->plaintext);
// get details
$item['details'] = trim($article->find('p', 0)->plaintext);
// get intro
$item['diggs'] = trim($article->find('li a strong', 0)->plaintext);
$ret[] = $item;
}
// clean up memory
$html->clear();
unset($html);
return $ret;
}
我甚至不能找到在Digg主页类的news-summary
任何div
。那foreach
循环可能永远不会执行,因为PHP找不到任何您要查找的div
。因此,$ret
永远不会被声明。
但是,您可以在函数的顶部添加$ret = array();
,因为他的回答中提到的hsz会使错误消息消失。
是的。新闻摘要不存在。我使用了库中的样本,这就是为什么我无法得到它。但$ ret = array()真的很有帮助。 – Dewsworld 2012-02-13 12:48:41
不是Digg有API吗?是因为$ html-> find('div.news-summary')不会产生任何结果吗? – 472084 2012-02-13 12:33:37
是的。它div.news总结不起作用。我改变它现在是什么。然后它工作。而$ ret = array()也帮助我摆脱了错误。 – Dewsworld 2012-02-13 12:47:29
你确定'$ html-> find('div.news-summary')'不返回空数组吗? – Eugene 2012-02-13 12:33:14