2011-02-01 2 views
0

Допустим, у меня есть таблица с 20 строками и скриптом разбиения на страницы.Повторение строк в массиве и их разбиение на страницы

Сценарий разбивки на страницы предназначен для отображения 10 строк на страницу и, конечно, отобразит две страницы.

Проблема в том, что иногда моя таблица будет иметь менее 20 строк, скажем, 3 - так скрипт будет отображать только одну страницу с 3 записями.

Мне нужен способ повторить эти 3 строки до тех пор, пока число 20 не восстановится, сохраните их в массиве и не используйте сценарий разбивки на страницы как обычно.

Любые идеи, можно ли это сделать? Может кто-то поместить это в код?

Для тех, кто задается вопросом, почему? :) Это проблема, связанная с каждой строкой, я прислал сообщение из своего блога, и у меня есть 20 сообщений, которые я хочу отображать. Если, например, таблица, в которой выполняются задания cron, имеет 17 строк, у меня будет только 17 сообщений, связанных с ними. Вот почему мне нужно переписывать их до 20, поэтому я буду показывать все мои 20 сообщений независимо от того, сколько строк у меня есть в таблице :)

+0

Звучит выполнимо. Но я сомневаюсь, что кто-то просто сложит код для вас. Возможно, вы могли бы показать нам, что вы уже сделали, попробовать проблему и попросить о конкретной помощи? –

+0

Почему вы задали свой вопрос дважды? Вот первый для справки: http://stackoverflow.com/questions/4866257/make-pagination-script-repeat-its-rows-on-the-first-page-if-row-number-is-under-a –

+0

Привет, я жестко задал вопрос, был неясен, и пропуская ... может быть, начать с чего-то более простого. Я удалю другой – webmasters

ответ

0
$query = "SELECT * FROM `db_table`";//PUT HERE A PROPER QUERY. 
$result = mysql_result($query); 

// mysql_num_rows($result) >10 WE ARE CHECKING HOW MANY LINES DO WE HAVE. 
if(mysql_num_rows($result) >10){ 
    /*...YOUR EXISTING CODES HERE...*/ 
} 
else{ 
    while($rows = mysql_fetch_assoc($result)){ 
     $arrayOfRows[] = $rows; // HERE WE PULL ROWS FROM DB AND PUT IN AN ARRAY. 
    } 
} 
// NOW YOUR DB ROWS ARE IN THE ARRAY NAMED $arrayOfRows IF YOUR DB TABLE HAS LESS THEN 10 ROWS 
$countRowsOfArray = count($arrayOfRows); 

$rows = 20; 
$dbRow=0; 
for($n=0;$n<$rows;$n++){ 
    if($dbRow > $countRowsOfArray) $dbRow = 0; 
    $newArrayOfRows[$n] = $arrayOfRows[$dbRow]; 
    $dbRow++; 
} 
//NOW YOU HAVE $newArrayOfRows WHICH YOUR ROWS REPEATED UNTIL 20 LINES. 


print_r($newArrayOfRows); //SEE IF THEY ARE THERE. 
+0

Это так интересно и полезно, будет изучать его, попытаться адаптироваться к моему коду и разместить его здесь также, большое вам спасибо – webmasters

+0

Ваш прием. У меня могут быть некоторые недостатки. Пожалуйста, проверьте его. Я только что написал это сейчас. Я написал это, чтобы показать вам логику. – borayeris

0

Простым решением будет (обратите внимание: этот код оптимизирован для читаемость, а не скорость):

$result = array(); 
for($i = 0; $i < 20; $i++){ 
    $result = $array[$i % sizeof($array)]; 
} 

Это наполнит $ результирующий массив с содержимым массива $, повторяя при необходимости. Кроме того, можно заменить условие цикла по:

$i < 20 || $i < sizeof($array) 

это будет копировать весь массив, а при необходимости (массив имеет менее 20 записей), добавьте копии.

+0

Thnk вы за ответ – webmasters

Смежные вопросы