#php #arrays
#php #массивы
Вопрос:
Я пытаюсь сохранить некоторые данные в массив. Однако созданный мной общедоступный массив становится нулевым внутри 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 будет массивом, задается значение null
Ответ №1:
Анонимная функция автоматически не получает доступ к внешним переменным. Вам нужно использовать эту use()
опцию для доступа к внешним переменным. И он должен быть ссылкой, чтобы изменения внутри функции влияли на исходную переменную, а не на копию.
$crawler->filter('p > strong')->each(function ($node) use (amp;$questions) {
$ques = $node->text();
echo $ques;
var_dump($ques);
array_push($questions, $ques);
});
Кстати, $questions
переменная в функции не совпадает со $questions
свойством класса. Вам нужно сделать:
$this->questions = $questions;
в конце функции, если вы хотите, чтобы она сохранялась в свойстве класса.
Комментарии:
1. Я сделал это, но по какой-то причине, когда я var_dump массив $questions, он возвращает пустой.
2. Мне нужно было сделать его ссылкой, иначе он изменяет копию массива.