Goutte - array_push() 期望参数 1 是数组,给定 null

我正在使用PHP 7.1.33和"fabpot/goutte": "^3.2"。


运行以下脚本时,我得到以下信息:


PHP Warning:  array_push() expects parameter 1 to be array, null given in C:\Users\testFile.php on line 88

PHP Stack trace:

PHP   1. {main}() C:\Users\testFile.php:0

PHP   2. updateCalendarDetailsData() C:\Users\testFile.php:104

PHP   3. Symfony\Component\DomCrawler\Crawler->each($closure = *uninitialized*) C:\Users\testFile.php:99

PHP   4. {closure:C:\Users\testFile.php:31-99}($node = *uninitialized*, *uninitialized*) C:\Users\Desktop\Code\vendor\symfony\dom-crawler\Crawler.php

:368

PHP   5. Symfony\Component\DomCrawler\Crawler->each($closure = *uninitialized*) C:\Users\testFile.php:90

PHP   6. {closure:C:\Users\testFile.php:53-90}($LEFT_TD = *uninitialized*, *uninitialized*) C:\Users\Desktop\Code\vendor\symfony\dom-crawler\Crawler.

php:368

PHP   7. array_push(*uninitialized*, *uninitialized*) C:\Users\testFile.php:88

我正在运行以下脚本:


<?php

require 'vendor/autoload.php';


use Goutte\Client;

use Symfony\Component\DomCrawler\Crawler;


function updateCalendarDetailsData()

{

    $client = new Client();


    $x = 1;

    $LIMIT = 3;

    global $x;

    global $LIMIT;

    $x++;

    $res1Array = array();


    $ffUrlArr = ["https://www.forexfactory.com/calendar.php?month=Jan2020"];

    foreach ($ffUrlArr as $key => $v) {


        try {

            $crawler = $client->request('GET', $ffUrlArr[$key]);

        } catch (\Exception $ex) {

            error_log($ex);

        }


        $TEMP = array();


        $count = $crawler->filter('.calendar_row')->count();

        $i = 1; // count starts at 1

        $crawler->filter('.calendar_row')->each(function ($node) use ($count, $i) {

            $EVENT = array();

            global $res1Array;


            $EVENTID = $node->attr('data-eventid');

有什么建议为什么我会收到警告?


感谢您的回复!


慕田峪7331174
浏览 228回答 1
1回答

牧羊人nacy

你需要global $res1Array在updateCalendarDetailsData()函数的顶部。匿名回调函数正在尝试使用此全局变量,但您正在初始化局部变量,而不是全局变量。您似乎假设它global只是允许您从任何外部范围访问变量,但它仅适用于全局变量。$TEMP和有类似的问题$EVENT。更好的方法是将变量包含在use()函数列表中。由于您正在使用 修改变量array_push(),因此您需要使用 将它们声明为引用&。<?phpfunction updateCalendarDetailsData(){&nbsp; &nbsp; $client = new Client();&nbsp; &nbsp; $x = 1;&nbsp; &nbsp; $LIMIT = 3;&nbsp; &nbsp; global $x;&nbsp; &nbsp; global $LIMIT;&nbsp; &nbsp; $x++;&nbsp; &nbsp; $res1Array = array();&nbsp; &nbsp; $ffUrlArr = ["https://www.forexfactory.com/calendar.php?month=Jan2020"];&nbsp; &nbsp; foreach ($ffUrlArr as $key => $v) {&nbsp; &nbsp; &nbsp; &nbsp; try {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $crawler = $client->request('GET', $ffUrlArr[$key]);&nbsp; &nbsp; &nbsp; &nbsp; } catch (\Exception $ex) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; error_log($ex);&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; $TEMP = array();&nbsp; &nbsp; &nbsp; &nbsp; $count = $crawler->filter('.calendar_row')->count();&nbsp; &nbsp; &nbsp; &nbsp; $i = 1; // count starts at 1&nbsp; &nbsp; &nbsp; &nbsp; $crawler->filter('.calendar_row')->each(function ($node) use ($count, $i, &$res1Array) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $EVENT = array();&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $EVENTID = $node->attr('data-eventid');&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $API_RESPONSE = file_get_contents('https://www.forexfactory.com/flex.php?do=ajax&contentType=Content&flex=calendar_mainCal&details=' . $EVENTID);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $API_RESPONSE = str_replace("<![CDATA[", "", $API_RESPONSE);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $API_RESPONSE = str_replace("]]>", "", $API_RESPONSE);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $html = <<<HTML<!DOCTYPE html><html>&nbsp; &nbsp; <body>&nbsp; &nbsp; &nbsp; &nbsp;$API_RESPONSE&nbsp; &nbsp; </body></html>HTML;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $subcrawler = new Crawler($html);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $subcrawler->filter('.calendarspecs__spec')->each(function ($LEFT_TD) use (&$res1Array, &$TEMP, &$EVENT) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $LEFT_TD_INNER_TEXT = trim($LEFT_TD->text());&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if ($LEFT_TD_INNER_TEXT == "Source") {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $TEMP = array();&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $LEFT_TD->nextAll()->filter('a')->each(function ($LINK) use (&$TEMP) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; array_push($TEMP, $LINK->text(), $LINK->attr('href'));&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; });&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $EVENT['sourceTEXT'] = $TEMP[0];&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $EVENT['sourceURL'] = $TEMP[1];&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $EVENT['latestURL'] = $TEMP[3];&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if ($LEFT_TD_INNER_TEXT == "Measures") {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $EVENT['measures'] = $LEFT_TD->nextAll()->text();&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if ($LEFT_TD_INNER_TEXT == "Usual Effect") {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $EVENT['usual_effect'] = $LEFT_TD->nextAll()->text();&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if ($LEFT_TD_INNER_TEXT == "Derived Via") {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $EVENT['derived_via'] = $LEFT_TD->nextAll()->text();&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var_dump($EVENT);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; print_r($EVENT);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (empty($EVENT)) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; echo "test";&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; array_push($res1Array, $EVENT); // <---- HERE I GET THE ERROR!&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; });&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $i++;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if ($i > $count) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; echo "<pre>";&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var_dump($res1Array);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; print_r($res1Array);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; echo "</pre>";&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; exit;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; });&nbsp; &nbsp; }&nbsp; &nbsp; return $res1Array;}
打开App,查看更多内容
随时随地看视频慕课网APP