Как получить значение атрибута data-original-title

120
09 октября 2019, 11:20

Для парсинга использую simple html dom parser. Есть такая разметка:

<span data-toggle="tooltip" title="" data-timestamp="15555555" class="catalog_podarkov" data-original-title="10.08.2017 в 10:02">В 2017 году</span>

Мне нужно получить значение атрибута data-original-title

Обращаюсь к этому элементу так:

$dates = $catalog->find('.catalog_podarkov');

В итоге получаю В 2017 году

пробовал так:

$dates = $catalog->find('.catalog_podarkov');
$dates = $dates[0]->attr['data-original-title'];

В итоге ошибка:

Notice: Undefined index: data-original-title

Что я делаю не так?

Answer 1

Как вы проверяете что именно вы получили? PHP позволяет разработчикам реализовывать метод __toString, который вызывается автоматически при приведении объекта к строке (как например в случае echo $dates;). Если вы хотите во время отладки узнать, что находится в переменной, используйте var_dump.

Далее, из документации либы следует, что для доступа к атрибутам, надо дёргать одноимённые свойства найденных элементов. То есть:

$elements = $catalog->find('.catalog_podarkov'); // тут вы получаете коллекцию элементов, даже если элемент всего один
foreach ($elements as $element) {
    echo $element->{'data-original-title'}; // синтаксис с фигурными скобками, позволяет обратиться к свойству с нестандартным именем
}

Код целиком, для невнимательных:

<?php
require __DIR__ . '/vendor/autoload.php';
$html = '<span data-toggle="tooltip" title="" data-timestamp="15555555" class="catalog_podarkov" data-original-title="10.08.2017 в 10:02">В 2017 году</span>';
$dom = \Sunra\PhpSimple\HtmlDomParser::str_get_html($html);
$elements = $dom->find('.catalog_podarkov');
foreach ($elements as $element) {
    echo $element->{'data-original-title'}, "\n";
}
// выводит 10.08.2017 в 10:02

Всё выдаёт.

READ ALSO
Не срабатывает json_decode из массива

Не срабатывает json_decode из массива

вывожу данные с помощью echo из массива $arr_val[1] отображает {"id_event":18,"id_user":2,"id_pr":2}

136
Не работает подключение mysqli_connect()

Не работает подключение mysqli_connect()

Помимо банальной опечатки с вызовом функции, в этом коде действительно не хватает важного пункта - настройки mysqli таким образом, чтобы она...

121
Laravel Сохранение файла из формы

Laravel Сохранение файла из формы

Сохраняю форму в бд автоматическим методом, как в уроке laracasts:

112
Как прекратить выполнение задачи? Job queue

Как прекратить выполнение задачи? Job queue

Мне нужно чтобы задача в очереди зависимости от Exception могла либо выполнятся далее, либо прерываться, и помещаться в таблицу failed_jobsСейчас пытаюсь...

120