Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Object of class DOMElement could not be converted to string in
Форумы портала PHP.SU » » Вопросы новичков » Object of class DOMElement could not be converted to string in

Страниц (2): [1] 2 »
 

1. strengerst - 17 Мая, 2019 - 15:56:41 - перейти к сообщению
Всем привет вот возникает такая проблема. Как можно элемент DOM сделать текстовым. Иначе у меня не кушает
второй параметр пишет должен быть только текст.

PHP:
скопировать код в буфер обмена
  1.  
  2. $url="...";
  3. $content=file_get_contents($url);
  4. $php_query=phpQuery::newDocument($content);
  5.  
  6.  
  7.  
  8. foreach ($php_query->find('.swf-img') as $data) {
  9. $data=pq($data);
  10. $data[]=$data->html();
  11. }
  12.  
  13. //Пытаемся преобразовать в строку массив на этом этапе возникает ошибка
  14. //Recoverable fatal error: Object of class DOMElement could not be converted to string in
  15. foreach ($data as $texts){
  16.     $strin="".$texts;
  17. }
  18. $re = '/background-image: url\(\/\/www.*?.jp/m';
  19.  
  20.  
  21. preg_match_all($re, $strin,$matches, PREG_SET_ORDER, 0);
  22.  
  23.  
  24. // Print the entire match result
  25. var_dump($matches);
  26.  
  27.  
2. Строитель - 17 Мая, 2019 - 16:12:39 - перейти к сообщению
strengerst, а как будут выглядеть данные в переменной $texts, если её распечатать в теле цикла функцией var_dump($texts); ?
3. LIME - 17 Мая, 2019 - 17:27:06 - перейти к сообщению
strengerst https://code[dot]google[dot]com/archive/[dot][dot][dot]/Attributes[dot]wiki
?
(Добавление)
Строитель phpQuery это интерфейс jQuery на php
(Добавление)
strengerst тут проще сразу по селектору background-image запросить
(Добавление)
https://code[dot]google[dot]com/archive/[dot][dot][dot]s/Selectors[dot]wiki
4. strengerst - 17 Мая, 2019 - 17:55:46 - перейти к сообщению
(Добавление)
strengerst тут проще сразу по селектору background-image запросить
Я понимая но по background-image у меня не находит там хитро сделанный код. А вот по регулярному выражению получить получалось.

CODE (html):
скопировать код в буфер обмена
  1.  
  2. <div itemprop="image" class="swf-img galleryscodei544243" style="background: url(//www.../chery_tiggo_3_164.jpeg) no-repeat center center;">
  3.                                 </div>

Может у вас лучше получится я делал так:
PHP:
скопировать код в буфер обмена
  1. $url="...";
  2. $content=file_get_contents($url);
  3. $php_query=phpQuery::newDocument($content);
  4.  
  5. foreach ($php_query->find('.swf-img') as $data) {
  6.     $data=pq($data);
  7.     $resault[]=$data->attr("background");
  8. }
  9. var_dump($resault);


$resault - в итоге массив равен 0;
5. LIME - 17 Мая, 2019 - 17:59:20 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1.         foreach ($php_query->find('.swf-img') as $data) {
  2.             $data[]=pq($data)->attr('style');
  3.         }
6. strengerst - 17 Мая, 2019 - 18:50:37 - перейти к сообщению
LIME пишет:
PHP:
скопировать код в буфер обмена
  1.         foreach ($php_query->find('.swf-img') as $data) {
  2.             $data[]=pq($data)->attr('style');
  3.         }


Не получается :
PHP:
скопировать код в буфер обмена
  1.  
  2. foreach ($php_query->find('.swf-img') as $data) {
  3.     $data=pq($data);
  4.         $data[]=$data->attr('style');
  5. }
  6. var_dump($data);
  7.  

var_dump - выводит кучу всего и нечего толком.
7. strengerst - 18 Мая, 2019 - 10:18:18 - перейти к сообщению
Если весь найденные код с phpQuery скопировать в программу с регулярными выражениями то получается подобрать выражение так что находит нужный участок код. Но вот вопрос, как преобразовать весь этот код переменной в строковый чтобы можно было задействовать регулярное выражение в моем коде Не понял
8. Строитель - 18 Мая, 2019 - 10:27:18 - перейти к сообщению
strengerst пишет:
var_dump - выводит кучу всего и нечего толком
Дак перед дампом пропишите тег форматирования: echo '<pre>'; var_dump($texts);

Посмотрите на полученную структуру, и станет понятнее.
9. LIME - 18 Мая, 2019 - 13:56:00 - перейти к сообщению
Строитель к сожалению надо знать половину ответа
Понятнее не станет
Я не знаю рецепта как его научить пользоваться объектами
(Добавление)
Он еще и с 10го года
Пичаль
10. Строитель - 18 Мая, 2019 - 14:07:52 - перейти к сообщению
LIME, я просто с телефона, и не могу полноценно проанализировать вопрос.
Если я правильно понял суть, тс-у нужно преобразовать объект в строку для последующей передачи этой строки в preg_match() ?

И если да, то можно же создать класс, наследующий получаемый из phpQuery() тип объекта, и в этом дочернем классе реализовать метод __toString() ?
11. LIME - 18 Мая, 2019 - 14:22:44 - перейти к сообщению
Строитель пишет:
то можно же создать класс, наследующий получаемый
для справки
на моей текущей работе
где от синьоров яблоку негде упасть(других просто не берут)
слово extend считается ругательным
аккуратнее с наследованием
предпочитай композицию/агрегацию или ассоциацию на худой конец
хотя это возможно слишком для вас пока
по сабжу
тс не смог пользоваться доками и понять что есть объект результата
за ручку водить не буду
удалился из треда
12. strengerst - 19 Мая, 2019 - 10:18:12 - перейти к сообщению
Ну что ту непонятного, результатом поиска в phpQuery я получаю не строку а объект phpQuery в котором не могу дальше найти нужную мне информацию. Но эту информацию я могу найти с помощью регулярного выражение в котором одним из параметром поиска является только строка в которой надо искать. Вот и получается что мне надо объект phpQuery преобразовать в строку объекта DOM php.
Вот попробую как советует товарищ с помощью метода toString() может получится.

Цитата:
И если да, то можно же создать класс, наследующий получаемый из phpQuery() тип объекта, и в этом дочернем классе реализовать метод __toString()


Пользоваться классами и объектами я умею у меня просто практики мало, так как работать с php я начал сравнительно не давно.
Цитата:
Я не знаю рецепта как его научить пользоваться объектами


Вот я глупый можно же и в phpQuery пользоваться регулярными выражениями как и в java
должна помочь в поиске по совпадению попробую
(Добавление)
Подскажите вот что: с помощью вот такой записи мы переменную $php_query преобразуем в переменную класса phpQuery. А как преобразовать теперь эту переменную в тип объекта класса php
PHP:
скопировать код в буфер обмена
  1. $php_query=phpQuery::newDocument($content);
  2. var_dump($php_query);
13. Строитель - 19 Мая, 2019 - 22:06:58 - перейти к сообщению
strengerst пишет:
попробую как советует товарищ с помощью метода toString() может получится.

Я уже пробовал - не получится. Вернее, объект-то можно превратить в сериализованную строку, но в ней не будет ожидаемых данных из html-разметки:
Спойлер (Отобразить)

Можно даже с помощью рефлексии превратить объект в строку (даже в НЕ сериализованную), но результат будет примерно такой же (без необходимого набора данных).

Выхода у вас два: изучить phpQuery, или переписать всё под регулярные выражения.
14. strengerst - 20 Мая, 2019 - 08:50:36 - перейти к сообщению
А в phpQuery нету поиска по регулярным выражением?
Переписать phpQuery это хорошая шутка Ха-ха
15. Строитель - 20 Мая, 2019 - 09:01:20 - перейти к сообщению
strengerst пишет:
А в phpQuery нету поиска по регулярным выражением?

Я не использую phpQuery - в документации об этом можно узнать наверняка.
strengerst пишет:
Переписать phpQuery

Я имел ввиду переписать не phpQuery, а ваш скрипт под использование без phpQuery (только на регулярках) Закатив глазки

 

Powered by ExBB FM 1.0 RC1