2012-03-27 84 views
3

我的樣本代碼是在這裏爲什麼我得到這個錯誤的通知:未定義指數:主機

include 'simple_html_dom.php'; 
function get_all_links($url){ 
    global $host; 
    $html = new simple_html_dom(); 
    $html->load(file_get_contents($url)); 

    foreach($html->find('a') as $a){ 
     $host1 = parse_url($a->href); 
     $host = parse_url($url); 
      if($host1['host'] == $host['host']){ 
        $data[] = $a->href; 
      } 
    } 
    return $data; 

} 
$links = get_all_links("http://www.example.com/"); 

foreach($links as $link){ 
    echo $link."<br />"; 
} 

當我嘗試這個代碼,我得到這個錯誤:注意:未定義指數:主機...什麼是錯的在我的代碼?請給我一些幫助代碼,謝謝提前。

+0

echo'

', print_r($host), '
'; - 這會給你什麼? – mikevoermans 2012-03-27 03:07:39

回答

2

您需要檢查數組包含條目isset'host'使用假設他們之前就存在:

if (isset($host1['host']) && isset($host['host']) 
     && $host1['host'] == $host['host']) { 

,也可以從檢查use @ to suppress warnings

if (@$host1['host'] == @$host['host']) { 

但是,您需要仔細檢查後者是否都符合您的要求。

更新:正如其他人指出,也有array_key_exists。它將處理null數組值,而isset返回falsenull值。

+1

我肯定會傾向於'isset()',尤其是對於檢查索引。抑制是一個壞習慣。 – Dan 2012-03-27 03:05:14

2

正如其他人回答,既isset()array_key_exists()將在這裏工作稱爲「主機」的指標。 isset()是好的,因爲它實際上可以採取多種參數:

if (isset($array[0], $array[1], $array[2])) 
{ 
    // ... 
} 

// same as 

if (isset($array[0]) && isset($array[1]) && isset($array[2])) 
{ 
    // ... 
} 

返回只有當所有的參數都設置true

+0

我總是忘記'isset'有多個參數,但無法回想最近的需求。它還在一個調用中處理多個數組級別,如'isset($ array1 ['foo'] ['bar'])''。 – 2012-03-27 06:17:14

相關問題