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

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: DOMelement to string и сортировка

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Без описания
xsh
Отправлено: 02 Декабря, 2017 - 11:58:45
Post Id



Новичок


Покинул форум
Сообщений всего: 55
Дата рег-ции: Авг. 2011  


Помог: 0 раз(а)




Учусь парсить через DOM столкнулся с проблемой того что domelement не string и дальнейшей сортировкой. Просьба помочь.

PHP:
скопировать код в буфер обмена
  1.  
  2. $dom = new DomDocument;
  3. $dom->loadHTMLFile("http://site.com");
  4. $xpath = new DomXPath($dom);
  5.  
  6. $nodes3 = $xpath->query("//table/tbody/tr/td[3]"); // имена
  7. $nodes5 = $xpath->query("//table/tbody/tr/td[5]"); // числа
  8.  
  9. header('Content-Type: text/html; charset=utf-8');
  10.  
  11. foreach ($nodes3 as $i => $node3) {
  12.         if ($i>=1) {
  13.         echo $dom->saveHTML($node3), "<br />"; //с тегом td
  14. //    echo $node3->nodeValue, "\n";
  15.         }
  16. }
  17. foreach ($nodes5 as $i => $node5) {
  18.         if ($i>=1) {
  19.         echo $dom->saveHTML($node5), "<br />"; //с тегом td
  20. //    echo $node5->nodeValue, "\n";
  21.         }
  22. }


первый массив: Саша, Петя, Коля;
второй массив: 1, 5, 3;
они одинаковой длины, хочу добиться того чтобы получился такой вывод:
первый массив: Петя, Коля, Саша;
второй: 5, 3, 1; // по убыванию
Спасибо за любую помощь.

(Отредактировано автором: 02 Декабря, 2017 - 12:00:14)



-----
$хикикомори()
goodlook...goodtime...connect... offline...
 
 Top
armancho7777777 Супермодератор
Отправлено: 02 Декабря, 2017 - 19:35:08
Post Id



Активный участник


Покинул форум
Сообщений всего: 4526
Дата рег-ции: Февр. 2011  
Откуда: Москва


Помог: 221 раз(а)




PHP:
скопировать код в буфер обмена
  1. $getCeilValue = function(DOMElement $row, $ceilIndex) use ($xpath) {
  2.     $ceil = $xpath->query("./td[{$ceilIndex}]", $row);
  3.     return $ceil->length ? trim($ceil[0]->nodeValue) : null;
  4. };
  5.  
  6. $rows = [];
  7.  
  8. foreach($xpath->query("//table/tbody/tr") as $row)
  9. {
  10.     $rows[] = [
  11.         'name' => $getCeilValue($row, 3),
  12.         'num'  => $getCeilValue($row, 5),
  13.     ];
  14. }
  15.  
  16. usort($rows, function($row1, $row2) {
  17.     return $row2['num'] - $row1['num'];
  18. });
  19.  
  20. var_dump($rows);
 
 Top
xsh
Отправлено: 02 Декабря, 2017 - 22:24:31
Post Id



Новичок


Покинул форум
Сообщений всего: 55
Дата рег-ции: Авг. 2011  


Помог: 0 раз(а)




armancho7777777пойду пробовать и разбираться, а пока скажу: "Спасибо!"


-----
$хикикомори()
goodlook...goodtime...connect... offline...
 
 Top
xsh
Отправлено: 03 Декабря, 2017 - 12:01:41
Post Id



Новичок


Покинул форум
Сообщений всего: 55
Дата рег-ции: Авг. 2011  


Помог: 0 раз(а)




armancho7777777, у меня php 5.4, как быть в таком случае?
вот что получаю
Fatal error: Cannot use object of type DOMNodeList as array
и инете нашел вот что:
In prior versions you'll need to use DOMNodeList's item() method to access a specific index, e.g. $cells->item(0).
https://stackoverflow[dot]com/questi[dot][dot][dot]odelist-as-array

(Отредактировано автором: 03 Декабря, 2017 - 12:08:58)



-----
$хикикомори()
goodlook...goodtime...connect... offline...
 
 Top
armancho7777777 Супермодератор
Отправлено: 03 Декабря, 2017 - 20:52:11
Post Id



Активный участник


Покинул форум
Сообщений всего: 4526
Дата рег-ции: Февр. 2011  
Откуда: Москва


Помог: 221 раз(а)




PHP:
скопировать код в буфер обмена
  1. $getCeilValue = function(DOMElement $row, $ceilIndex) use ($xpath) {
  2.     $ceil = $xpath->query("./td[{$ceilIndex}]", $row);
  3.     return $ceil->length ? trim($ceil->item(0)->nodeValue) : null;
  4. };

(Добавление)
А лучше - обновите PHP.
 
 Top
xsh
Отправлено: 04 Декабря, 2017 - 08:53:54
Post Id



Новичок


Покинул форум
Сообщений всего: 55
Дата рег-ции: Авг. 2011  


Помог: 0 раз(а)




armancho7777777, я пробовал обновлять, но в таком случае тот сайт на котором я тренируюсь, не отдает DOM, обнаружил это на Вашем скрипте, это очень странно, поскольку на 5.4 дает парсить. пока не понял как это возможно. по мне так либо дает, либо нет.


-----
$хикикомори()
goodlook...goodtime...connect... offline...
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB