PHP . SU
Программирование на PHP, MySQL и другие веб-технологии
Без описания
Поиск в теме | Версия для печати
bombording
Отправлено: 17 Ноября, 2013 - 09:53:40
Новичок
Покинул форум
Сообщений всего: 10
Дата рег-ции: Нояб. 2013
Помог: 0 раз(а)
Добрый день!
Имеется цикл, который добавляет данные в массив. Мне необходимо сделать вывод данных постранично. Для этого необходимо задать циклу начало и конец выполнения.
PHP:
скопировать код в буфер обмена
// в эти переменные передаем постом, на какой странице мы находимся.
$page = isset ( $_POST [ 'page' ] ) ?
intval ( $_POST [ 'page' ] ) : 1 ; // сколько записей выводить на странице
$rows = 10 ;
$offset = ( $page - 1) * $rows ;
// начало
$i = 0 ;
foreach ( $html -> find ( '#table tr' ) as $a ) {
// это некое условие при котром обрабатывается массив
if ( @ $a -> find ( 'td' , 0) -> plaintext ) {
$o = new stdClass( ) ;
$o -> date = date ( 'F j, Y' , strtotime ( $a -> find ( 'td a' , 0
) -> plaintext ) ) ; $o -> slow = $a -> find ( 'td' , 2) -> plaintext ;
$arr [ ] = $o ;
}
// задаем конец выполнения цикла
if ( ++ $i == ( $rows + $offset ) ) break ;
}
Помогите пожалуйста задать циклу что бы он добавлял в массив данные с заданным количеством шагов.
Например:
1 страница
В цикл попадают записи с 0 по 10
2 страница
В цикл попадают записи с 10 по 20
и т.д.(Отредактировано автором: 17 Ноября, 2013 - 09:55:23)
bombording
Отправлено: 17 Ноября, 2013 - 10:46:11
Новичок
Покинул форум
Сообщений всего: 10
Дата рег-ции: Нояб. 2013
Помог: 0 раз(а)
DelphinPRO пишет: вам не цикл нужно ограничивать, а выбирать только нужные данные в него.
При выборе из БД данный вопрос решается с помощью оператора LIMIT
Это верно. Но в данном случае работает парсер (DOM), и данные берутся не из SQL а из обычного html....в этом то и вся сложность.
Не хотелось бы отказываться от постраничного вывода, может быть есть способ сделать это в цикле?
(Отредактировано автором: 17 Ноября, 2013 - 10:47:38)
likvidator
Отправлено: 17 Ноября, 2013 - 10:49:54
Посетитель
Покинул форум
Сообщений всего: 416
Дата рег-ции: Март 2012
Помог: 4 раз(а)
[+]
Может глупость скажу,но все же: а если попробовать через WHILE?
Просто увеличивайте значение $i
(Добавление)
даже
(Отредактировано автором: 17 Ноября, 2013 - 10:55:21)
bombording
Отправлено: 17 Ноября, 2013 - 10:55:02
Новичок
Покинул форум
Сообщений всего: 10
Дата рег-ции: Нояб. 2013
Помог: 0 раз(а)
likvidator пишет: Может глупость скажу,но все же: а если попробовать через WHILE?
Просто увеличивайте значение $i
count($html->find('#table tr')) у меня ровно 350.
Тут будет немного другое. На первой странице будут все 350 записей и с каждой страницей они будут уменьшаться на $i...
bombording
Отправлено: 17 Ноября, 2013 - 11:03:47
Новичок
Покинул форум
Сообщений всего: 10
Дата рег-ции: Нояб. 2013
Помог: 0 раз(а)
likvidator пишет: переделал
Что то не пойму куда while прописать....в сам foreach?
Делаю так, цикл отрабатывается весь но данных в массиве нету.
PHP:
скопировать код в буфер обмена
$page = 1 ;
$rows = 10 ;
$offset = ( $page - 1) * $rows ;
foreach ( $html -> find ( '#table tr' ) as $a ) {
if ( @ $a -> find ( 'td' , 0) -> plaintext ) {
while ( $offset ++< $offset + 10) {
$o = new stdClass( ) ;
$o -> date = date ( 'F j, Y' , strtotime ( $a -> find ( 'td nobr a' , 0
) -> plaintext ) ) ; $o -> slow = $a -> find ( 'td' , 2) -> plaintext ;
$arr [ ] = $o ;
}
}
//if(++$i == $rows) break;
}
likvidator
Отправлено: 17 Ноября, 2013 - 11:07:43
Посетитель
Покинул форум
Сообщений всего: 416
Дата рег-ции: Март 2012
Помог: 4 раз(а)
[+]
нет...форыч вообще не нужен в этом случае..хотя.можете дать дамп,хотя бы примерный
?(Отредактировано автором: 17 Ноября, 2013 - 11:19:31)
bombording
Отправлено: 17 Ноября, 2013 - 11:19:13
Новичок
Покинул форум
Сообщений всего: 10
Дата рег-ции: Нояб. 2013
Помог: 0 раз(а)
likvidator пишет: нет...форыч вообще не нужен в этом случае..хотя.можете дать дамп,хотя бы примерный
?
Там выводятся найденные теги tr в таблице:
CODE (
html ):
скопировать код в буфер обмена
<table >
<tr >
<td > 1</ td >
<td ><nobr><a href = "http://link11" > 2013-11-11</ a ></ nobr></ td >
<td ><a href = "http://link21" > Excel</ a > </ td >
</ tr >
<tr >
<td > 2</ td >
<td ><nobr><a href = "http://link21" > 2013-11-12</ a ></ nobr></ td >
<td ><a href = "http://link22" > Excel</ a > </ td >
</ tr >
</ table >
Всего тегов tr 350 штук.
Далее уже обрабатываются теги td которые находятся в tr и загоняются в массив
PHP:
скопировать код в буфер обмена
if ( @ $a -> find ( 'td' , 0) -> plaintext ) {
$o = new stdClass( ) ;
$o -> date = date ( 'F j, Y' , strtotime ( $a -> find ( 'td nobr a' , 0
) -> plaintext ) ) ; $o -> slow = $a -> find ( 'td' , 2) -> plaintext ;
$arr [ ] = $o ;
}
likvidator
Отправлено: 17 Ноября, 2013 - 11:32:41
Посетитель
Покинул форум
Сообщений всего: 416
Дата рег-ции: Март 2012
Помог: 4 раз(а)
[+]
А ваш код
PHP:
скопировать код в буфер обмена
// в эти переменные передаем постом, на какой странице мы находимся.
$page = isset ( $_POST [ 'page' ] ) ?
intval ( $_POST [ 'page' ] ) : 1 ;
// сколько записей выводить на странице
$rows = 10 ;
$offset = ( $page - 1) * $rows ;
// начало
$i = 0 ;
foreach ( $html -> find ( '#table tr' ) as $a ) {
// это некое условие при котром обрабатывается массив
if ( @ $a -> find ( 'td' , 0) -> plaintext ) {
$o = new stdClass( ) ;
$o -> date = date ( 'F j, Y' , strtotime ( $a -> find ( 'td a' , 0
) -> plaintext ) ) ;
$o -> slow = $a -> find ( 'td' , 2) -> plaintext ;
$arr [ ] = $o ;
}
// задаем конец выполнения цикла
if ( ++ $i == ( $rows + $offset ) ) break ;
}
отрабатывает как надо?
bombording
Отправлено: 17 Ноября, 2013 - 11:35:52
Новичок
Покинул форум
Сообщений всего: 10
Дата рег-ции: Нояб. 2013
Помог: 0 раз(а)
likvidator пишет: А ваш код
PHP:
скопировать код в буфер обмена
// в эти переменные передаем постом, на какой странице мы находимся.
$page = isset ( $_POST [ 'page' ] ) ?
intval ( $_POST [ 'page' ] ) : 1 ;
// сколько записей выводить на странице
$rows = 10 ;
$offset = ( $page - 1) * $rows ;
// начало
$i = 0 ;
foreach ( $html -> find ( '#table tr' ) as $a ) {
// это некое условие при котром обрабатывается массив
if ( @ $a -> find ( 'td' , 0) -> plaintext ) {
$o = new stdClass( ) ;
$o -> date = date ( 'F j, Y' , strtotime ( $a -> find ( 'td a' , 0
) -> plaintext ) ) ;
$o -> slow = $a -> find ( 'td' , 2) -> plaintext ;
$arr [ ] = $o ;
}
// задаем конец выполнения цикла
if ( ++ $i == ( $rows + $offset ) ) break ;
}
отрабатывает как надо?
Да, все хорошо работает. С начало находится #table tr, затем все td из каждого tr загоняются в массив.
Комманда if(++$i == ($rows+$offset)) break; Останавливает выполнение цикла в положенном месте.
DelphinPRO
Отправлено: 17 Ноября, 2013 - 14:08:26
Активный участник
Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012
Помог: 353 раз(а)
bombording пишет: Но в данном случае работает парсер (DOM), и данные берутся не из SQL а из обычного html....в этом то и вся сложность.
нет здесь никакой сложности. используйте цикл for
PHP:
скопировать код в буфер обмена
$start = 0 ;
$end = 12 ;
$rgData = $html -> find ( '#table tr' ) ;
for ( $i = $start ; $i <= $end ; $i ++ ) {
$a = $rgData [ $i ] ;
// это некое условие при котром обрабатывается массив
if ( @ $a -> find ( 'td' , 0) -> plaintext ) {
$o = new stdClass( ) ;
$o -> date = date ( 'F j, Y' , strtotime ( $a -> find ( 'td a' , 0
) -> plaintext ) ) ; $o -> slow = $a -> find ( 'td' , 2) -> plaintext ;
$arr [ ] = $o ;
}
}
(Добавление)
кстати эту часть можно так переписать:
(Отредактировано автором: 17 Ноября, 2013 - 14:08:56)
-----Чем больше узнаю, тем больше я не знаю.
Поиск в теме | Версия для печати
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
Powered by ExBB FM 1.0 RC1. InvisionExBB