2016-10-13 30 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