2016-10-13 28 views
2

我试图将一些数据存储到数组中。 但是,我创建的公共数组在each()内变为null。 如何纠正?传递给each()的数组为空

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); 
    }); 
} 

错误: ErrorException在Crawler.php线20: array_push()预计参数1是阵列,空给出

回答

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; 

在功能的末尾,如果你想保存在类属性。

+0

我这样做,但由于某种原因,当我var_dump $ questions数组它返回空。 –

+1

我需要将它作为参考,否则它会修改数组的副本。 – Barmar