我正在用PHP开发Android Play商店的网络抓取工具,我遇到了一些麻烦。 这是我用来获取应用评论的功能:
function reviews($url_to_crawl , $crawler) {
$reviews_contents = array();
if (num_reviews($url_to_crawl, $crawler)) {
$crawler->filter('.review-body')->each(function(Symfony\Component\DomCrawler\Crawler $node, $i) use ($reviews_contents) {
$reviews_contents[$i] = trim($node->text());
});
}
return $reviews_contents;
}
现在$reviews_contents
是空的,我猜是因为我使用匿名函数。还有另一种方法吗?
答案 0 :(得分:2)
你需要在$reviews_contents
这样的reference中传递变量use
function(Symfony\Component\DomCrawler\Crawler $node, $i) use (&$reviews_contents)
答案 1 :(得分:2)
因为匿名函数中的use
按值而不是按引用传递变量。你想要一个引用,这样你就可以修改变量,并在调用函数后保持这些修改。
function (Symfony\Component\DomCrawler\Crawler $node, $i) use (&$reviews_contents) {
// modifications to `$reviews_contents` will stick around because it's now
// a reference, not passed by value
}
答案 2 :(得分:1)
尝试放置&在$ reviews_contents之前,如下所示获取对该变量的引用...
use (&$reviews_contents)