我被这个问题难倒了。我使用Symfony的Dom爬虫来过滤一些元素,然后提取节点数据推送到可以转换为json的数组中。然而下面的代码抛出了一个“Uncaught TypeError:array_push():Argument #1($array)must be of type array”错误。
if($query == 'begin') {
$persons = $crawler->filter('#content > table > tr > td > a');
$trial = [];
$persons->each(function (Crawler $node) {
$holder['name'] = $node->text();
$holder['url'] = $node->attr('href');
print_r($holder['name']);
// Correct value printed
print_r($holder['url']);
// Correct value printed
; array_push($trial, $holder);
});
var_dump($trial);
print_r显示期望的键值,但$trail数组为空。
然而,当我尝试时,给出了正确的值:
$persons->each(function (Crawler $node) {
echo "<div class='col col-lg-3'>
<a href='{$node->attr('href')}'>{$node->text()}</a>
</div>";
});
2条答案
按热度按时间k4aesqcs1#
你的问题是在变量作用域中。函数each有自己的局部作用域。变量
$trial
在上层函数的局部作用域中。有两个不同的局部作用域,这就是为什么你不能“看到”这个变量的原因。6ljaweal2#
似乎问题是返回foreach循环上的值。设法用下面的代码解决它:
此线程的帽尖-https://github.com/FriendsOfPHP/Goutte/issues/266