2016-10-13 5 views
2

配列にデータを格納しようとしています。 しかし、私が作成したパブリック配列は、each()の中でnullになります。 どのように修正するのですか?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()がnullを匿名関数が自動的に外部の変数へのアクセスを得ることはありません

答えて

8

を与え、パラメータ1が配列であることを期待しています。外部変数にアクセスするには、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

私はこれを行いましたが、何らかの理由で$ questions配列をvar_dumpしたときに空を返します。 –

+1

私はそれを参考にする必要がありました。そうでなければ、配列のコピーを変更しています。 – Barmar

関連する問題