2012-02-13 78 views
0

变量的作用域,我有以下代码错误是由于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范围的修复程序。请帮忙。

+0

不是Digg有API吗?是因为$ html-> find('div.news-summary')不会产生任何结果吗? – 472084 2012-02-13 12:33:37

+0

是的。它div.news总结不起作用。我改变它现在是什么。然后它工作。而$ ret = array()也帮助我摆脱了错误。 – Dewsworld 2012-02-13 12:47:29

+0

你确定'$ html-> find('div.news-summary')'不返回空数组吗? – Eugene 2012-02-13 12:33:14

回答

3

scraping_digg功能的beggining声明变量:

$ret = array(); 
+0

附加信息:http://php.net/manual/en/language.variables.scope.php – 2012-02-13 13:06:16

1

的行号将是最重要的信息!

$ret[] = $item; 

此行可能会触发通知,在函数的开始加入类似

$ret=array(); 
1

其因$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; 
} 
1

我想你不会同时初始化功能范围内的和$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; 
    } 
1

我甚至不能找到在Digg主页类的news-summary任何div。那foreach循环可能永远不会执行,因为PHP找不到任何您要查找的div。因此,$ret永远不会被声明。

但是,您可以在函数的顶部添加$ret = array();,因为他的回答中提到的hsz会使错误消息消失。

+0

是的。新闻摘要不存在。我使用了库中的样本,这就是为什么我无法得到它。但$ ret = array()真的很有帮助。 – Dewsworld 2012-02-13 12:48:41