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 :: Проверить массив, полученный Simple HTML DOM на наличие элемнта массива

 PHP.SU

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


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

> Описание: Не помогает не просто if(), ни if(isset())
Wooorker
Отправлено: 18 Декабря, 2014 - 11:37:16
Post Id



Гость


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


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




Нужно каким-то образом проверить массив, полученный Simple HTML DOM на наличие элемнта массива. Вот такой вот цикл имеем:
PHP:
скопировать код в буфер обмена
  1. do {
  2.                 $link=nextPage->href;
  3.                 $html_prod = str_get_html($link));
  4.                 foreach($html_prod->find('div[class=ClassName] div.pageNavigation a[class=nextPage]') as $nextPage){
  5.                     if(isset($nextPage->href))
  6.                     {
  7.                         echo 'Существует ссылка на следующую страницу '.$nextPage->href.'<br>';
  8.                     }else{
  9.                         echo 'Ссылка на следующую страницу отсутствует<br>';
  10.                     }
  11.                     ob_flush();
  12.                     flush();
  13.                 }
  14.             } while (isset($nextPage->href));

В данном случае получаем бесконечный цикл. Внутри do while для тестирования введен if.
Сначало это было , затем заменил на - результат один и тот же. Если есть элемент массива, то
PHP:
скопировать код в буфер обмена
  1. echo 'Существует ссылка на следующую страницу '.$nextPage->href.'<br>';
выводит на экран соответствующее сообщение. В противном случае!!! (else) на экран должно выводиться 'Ссылка на следующую страницу отсутствует', но не выводится ничего! Т. е. нельзя получить if(!isset())=true. Соответственно цикл не может завершиться.
Я уже даже не знаю как правильно проверку провести. Приходит в голову только, что на длину строки полученный элемент проверять Улыбка

(Отредактировано автором: 18 Декабря, 2014 - 12:49:31)

 
 Top
Wooorker
Отправлено: 18 Декабря, 2014 - 14:33:13
Post Id



Гость


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


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




В целом код оказался неверен.
Но проблема с isset осталась.

Если сделать вот так
PHP:
скопировать код в буфер обмена
  1.             while (isset($nextPage))            
  2.             {
  3.                 $nextPage = $html_prod->find('div[class=ClassName] div.divName a[class=nextPage]', 0);
  4.                 if(!isset($nextPage)) break;
  5.                 if( !preg_match('#^http://#',$nextPage->href) )$nextPage->href = 'http://www.sitename.com'.$nextPage->href;
  6.                 //echo $nextPage->href.'<br>';
  7.                 $html_prod = str_get_html($this->request($nextPage->href,parse::$auth));
  8.                 echo link = '.$nextPage->href.'<br>';
  9.            }
  10.  
, то при закомментированном опять получается бесконечный цикл. Если убрать комментарий, то получается условие заданное в while не несёт никакой смысловой нагрузки.

(Отредактировано автором: 18 Декабря, 2014 - 14:34:17)

 
 Top
RickMan
Отправлено: 18 Декабря, 2014 - 14:48:50
Post Id


Участник


Покинул форум
Сообщений всего: 1033
Дата рег-ции: Май 2012  


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




isset - проверяет на существование переменной. Если вы прямо до проверки берете и создаете эту переменную то isset всегда даст true. Я не вникал в то, что вам нужно, но попробуйте посмотреть в сторону empty

(Отредактировано автором: 18 Декабря, 2014 - 14:49:12)

 
 Top
Wooorker
Отправлено: 18 Декабря, 2014 - 19:22:15
Post Id



Гость


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


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




RickMan пишет:
isset - проверяет на существование переменной. Если вы прямо до проверки берете и создаете эту переменную то isset всегда даст true. Я не вникал в то, что вам нужно, но попробуйте посмотреть в сторону empty

пробовал и empty - результат такой же. По условию while ни каким образом не получается завершить цикл.
Если до
PHP:
скопировать код в буфер обмена
  1. if( !preg_match('#^http://#',$nextPage->href) )$nextPage->href = 'http://www.sitename.com'.$nextPage->href;
не делать проверку isset, то php создаёт по-умолчанию пустой объект. И всё-равно в этом случае проверка на empty не завершает цикл.

(Отредактировано автором: 18 Декабря, 2014 - 19:23:21)

 
 Top
Krava
Отправлено: 18 Декабря, 2014 - 22:43:41
Post Id


Новичок


Покинул форум
Сообщений всего: 17
Дата рег-ции: Нояб. 2013  


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




Если я не ошибаюсь, то все атрибуты есть в $block->attr.
А наличие проверить можно через count()
 
 Top
kotyara1979
Отправлено: 19 Декабря, 2014 - 01:27:40
Post Id


Частый гость


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


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




Что то не пойму твой подход.

Зачем проверять наличие атрибута = ссылки?

Ты ищешь нужные элементы, проверяешь наличие следующих страниц.
Если элемент найден, то и атрибут этот есть. Ты же тег <a>, ищешь. В крайнем случае, проверь наличие HREF в outertext, делов то.


-----
Сделать можно все. Главное одеть каску.
 
 Top
Wooorker
Отправлено: 19 Декабря, 2014 - 06:25:33
Post Id



Гость


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


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




Krava пишет:
Если я не ошибаюсь, то все атрибуты есть в $block->attr.
А наличие проверить можно через count()


Да, вот count() я ещё не пробывал. Спасибо!
 
 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