我一直收到这个错误" in_array()期望参数2是数组,null给定"

时间:2015-09-09 17:17:24

标签: php arrays

我犯了这个错误" in_array()期望参数2是数组,null给定"即使我有" $ c = array();"

下面是我的代码:

    Route::get('/', function () {
        return view('welcome');
    });

    get('pro', function(){

        $to_crawl = "http://bestspace.co";
        $c = array();

        function get_links($url)
        {
            global $c;
            $input = @file_get_contents($url);
            $regexp = '<a\s[^>]*href=(\"??)([^" >]*?)\\1[^>]*>(.*)<\/a>';
            preg_match_all("/$regexp/siU", $input, $matches);
            $base_url = parse_url($url, PHP_URL_HOST);

            $l = $matches[2];

            foreach($l as $link)
            {



                if (strpos($link, "#"))
                {
                    $link = substr($link, 0, strpos($link, "#"));
                }

                if (substr($link,0,1) == ".")
                {
                    $link = substr($link, 1);
                }

                if (substr($link, 0, 7) == "http://")
                {
                    $link = $link;
                }

                else if (substr($link, 0, 8) == "https://")
                {
                    $link = $link;
                }

                else if (substr($link, 0, 2) == "//")
                {
                    $link = substr($link, 2);
                }

                else if (substr($link, 0, 2) == "#")
                {
                    $link = $url;
                }

                else if (substr($link, 0, 7) == "mailto:")
                {
                    $link = "[". $link."]";
                }

                else
                {
                    if (substr($link, 0, 1) != "/")
                    {
                        $link = $base_url."/".$link;
                    }

                    else
                    {
                        $link = $base_url.$link;
                    }
                }


                if (substr($link, 0, 7) != "http://" && substr($link, 0, 8) != "https://" && substr($link, 0, 1) != "[")
                {
                    if (substr($url, 0, 8) == "https://")
                    {
                        // prepend https
                        $link = "https://".$link;
                    }
                    else
                    {
                        // prepend http
                        $link = "http://".$link;
                    }
                }



                //echo $link."<br>";
                if (!in_array($link, $c))
                {
                    array_push($c, $link);
                }
            }

        }

        get_links($to_crawl);

        foreach ($c as $page)
        {
            echo $page."<br>";
        }
    });

问题来自这里

 if (!in_array($link, $c))
     {
          array_push($c, $link);
     }

它抱怨$ c,但它是全球性的,我也有它的

$ c = array();

任何帮助,为什么会发生这种情况将不胜感激。

2 个答案:

答案 0 :(得分:2)

这就是问题的真正原因:

    get('pro', function(){

         $to_crawl = "http://bestspace.co";
         $c = array();

         function get_links($url)
         {
             global $c;

$c = array()位于闭包内,您作为get() - 函数的第二个参数传递,不在全局命名空间中,但在闭包命名空间中。 使用global $c无法正常工作,然后。

要解决此问题,只需在get_links()函数中传递$ c

    function get_links($url, array &$c)
    {

答案 1 :(得分:-1)

你的get_links()函数中的

,你试过&#34; use()&#34;条款?

function get_links() use($c) {
    print_r($c)
}