传递给each()的数组为null

时间:2016-10-13 10:59:18

标签: php arrays

我正在尝试将一些数据存储到数组中。 但是,我创建的公共数组在each()内变为null。 怎么纠正?

public $questions = array();

public function crawl(){
    $questions = array();
    $client = new Client();
    $crawler = $client->request('GET', 'https://indiabusinessquiz.com/');
    $crawler->filter('p > strong')->each(function ($node) {       
      $ques = $node->text();
      echo $ques;
      var_dump($ques);
      array_push($questions, $ques);
    });
}

错误: Crawler.php第20行中的ErrorException: array_push()期望参数1为数组,给定

为null

1 个答案:

答案 0 :(得分:8)

匿名函数不会自动访问外部变量。您需要使用use()选项来访问外部变量。它需要作为参考,以便函数内部的修改影响原始变量,而不是副本。

$crawler->filter('p > strong')->each(function ($node) use (&$questions) {       
  $ques = $node->text();
  echo $ques;
  var_dump($ques);
  array_push($questions, $ques);
});

顺便说一句,函数中的$questions变量与类的$questions属性不同。你需要这样做:

$this->questions = $questions;

在函数末尾,如果你想将它保存在类属性中。