PHP Dom: nodeValue читается как объект вместо строки - PullRequest
0 голосов
/ 02 ноября 2011

Я пытаюсь извлечь ссылки из множества веб-страниц и сообщить о них в виде таблиц.У меня есть эта функция, get_links ($ pageId), которая должна получать содержимое страницы и извлекать значения и атрибуты href каждого тега привязки.

function get_links($pageId) {
    $page_contents = file_get_contents('http://www.mysite.com/?p='.$pageId);
    $html = new DOMDocument();
    @$html->loadHTML($page_contents);
    $anchors = $html->getElementsByTagName('a');
    $link_array = array();
    foreach($anchors as $anchor) {
        if (!empty($anchor->nodeValue)) {
            $text = $anchor->nodeValue;
            $link = $anchor->getAttribute('href');
            $link_array[$text] = $link;
        }
    }
    return $link_array;
}

Когда я запускаю эту функцию на одномстраниц ничего не возвращает.Например, если я вызываю:

$page_links = get_links('someId');
foreach($page_links as $text->$link) {
    //my print functions
};

, я получаю «Неустранимая ошибка: невозможно получить доступ к пустому свойству» для строки foreach.

Повторяет текст $ и ссылку $ в foreach ($ якоря) цикл работает нормально.То же самое делает вывод значений из $ link_array после цикла.Но повторение клавиш не дает.Если я вставлю этот тест сразу после цикла:

foreach($link_array as $text->$link) {echo $text;}

, я получу эту ошибку: «Исправляемая фатальная ошибка: объект класса stdClass не может быть преобразован в строку».

Почему быво время цикла он печатается нормально, но когда я помещаю его в массив для возврата, он будет рассматриваться как объект?

1 Ответ

1 голос
/ 02 ноября 2011

Вы пытаетесь присвоить повторяющиеся значения цикла foreach атрибуту объекта.Я думаю, что вы на самом деле хотите вместо

foreach($link_array as $text => $link) { echo $text;}

.

Saying $text->$link говорит PHP принять текущее итеративное значение foreach и присвоить его свойству $ link объекта $ text.- однако $ text и $ link не являются объектами в этой точке, поэтому вы присваиваете атрибуты несуществования несуществующего объекта, вызывая ошибку «Cannot access empty property».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...