我犯了这个错误" 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();
任何帮助,为什么会发生这种情况将不胜感激。
答案 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)
,你试过&#34; use()&#34;条款?
function get_links() use($c) {
print_r($c)
}