Почему я получаю эту ошибку Примечание: неопределенный индекс: хост

мой пример кода здесь

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 />";
}

Когда я пробовал этот код, я получил эту ошибку: Примечание: неопределенный индекс: хост в ... Что не так в моем коде? Пожалуйста, предложите мне некоторый код помощи, спасибо заранее.

 mikevoermans27 мар. 2012 г., 05:07
echo '<pre>', print_r ($ host), '</ pre>'; - что это тебе дает?

Ответы на вопрос(3)

Решение Вопроса

содержат ли массивы записи для'host' с помощьюisset прежде чем предположить, что они существуют:

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

Или вы можетеиспользование@ подавить предупреждения из чека.

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

Тем не менее, вам нужно перепроверить, что последний работает, как вы хотите, когда оба отсутствуют.

Обновить: Как отметили другие, есть такжеarray_key_exists, Он справитсяnull Значения массива, тогда какisset возвращаетсяfalse заnull ценности.

 Dan Lugg27 мар. 2012 г., 05:05
Я бы определенно высказалсяisset() чрезмерное подавление ошибок, особенно для проверки индексов. Подавления - плохая привычка.

Как ответили другие, оба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 только если все аргументы установлены.

 David Harkness27 мар. 2012 г., 08:17
Я всегда забываю оisset принимая несколько аргументов, но не могу вспомнить недавнюю необходимость в этом. Он также обрабатывает несколько уровней массива в одном вызове, таких какisset($array1['foo']['bar']).

host", используяarray_key_exists

if (array_key_exists($host, "host") && array_key_exists($host1, "host") && ...)

http://us3.php.net/manual/en/function.array-key-exists.php

Ваш ответ на вопрос