2010-08-19 10 views
34

esto parece matemáticas muy simples pero de alguna manera, mi cerebro no puede pensar ...Cálculo elemento de compensación para paginación

Estoy tratando de poner en práctica la paginación y tendrá que calcular el elemento de compensación para usar en la limitación de mi conjunto de resultados. Tengo problemas para calcular qué índice debe tener el primer elemento de la página.

por ejemplo.

with 1 page having 10 items 

page 1 will have items 1 - 10 
page 2 ............... 11 - 20 
page 3 ............... 21 - 30 

pensé en

offset = page * itemsPerPage + 1 

pero esto no será el caso para la página 1. debe haber una fórmula para esto? estoy usando PHP/Zend_Paginator/Doctrine2 pero esto debe ser independiente del lenguaje

se preguntan si este debe estar en el sitio de la matemáticas de cambio de pila

Respuesta

69

Uso offset = (page - 1) * itemsPerPage + 1.

+13

¿No debería ser: desplazamiento = (página - 1) * itemsPerPage Como resultado número 1 no sería nunca se demuestre lo contrario? –

+2

Hola, te refieres a offset = (page_number - 1) * itemsPerPage; Si es así, ¿el resultado no generará números más grandes que el número de ItemsPerPage? – Jam

+0

Quise responder a la pregunta teniendo en cuenta el ejemplo de Jiew.Obviamente está tratando de calcular el primer número de artículo para cada página; entonces firstItemForPage (1) = (1-1) · 10 + 1 = 1, firstItemForPage (2) = (2-1) · 10 + 1 = 11, y así sucesivamente. – Gumbo

22

Honestamente depende. No soy una persona de PHP, pero pondré ambos por ahí. Si usted está tirando de sus registros a algún tipo de colección (lista, matriz, etc.), entonces su fórmula debe ser:

offset = (page - 1) * itemsPerPage 

Esto se debe a que la mayor parte (de nuevo, no soy una persona PHP) y matrices las listas usan 0 para su primer elemento. Si no utilizan 0 para el primer elemento y/o usted está tirando de una tabla o algo más, donde los identificadores comienzan en 1, entonces debería ser:

offset = (page - 1) * itemsPerPage + 1 

espero que sea clara y ayuda.

7
start = (page - 1) * itemsPerPage + 1 
    end = totalItems 

    if (itemsPerPage < totalItems) { 
    end = itemsPerPage * page 
    if (end > totalItems) { 
     end = totalItems; 
    } 
    } 

    // e.g. "21-30 of 193 items" 
    start + '-' + end + ' of ' + totalItems + ' items' 
1

El uso de JS como ejemplo, para las personas de aplicaciones web progresistas ...

JS matrices tienen el método prototipo .slice(start, end)overview here se necesita un índice de inicio y un índice final como argumentos.

Encontré que la manera más fácil de calcular ambos índices es la siguiente;

Inicio Índice

var start = parseInt((selectedPage - 1) * resultsPerPage); 

Índice de Fin

var end = parseInt(selectedPage * resultsPerPage); 

Ejecución

var myPaginatedArray.slice(start, end); 
0

uso de este

$row_page = 5; //items per page 

if(isset($_GET['p'])){ 
    $page_num = $_GET['p']; 
} else { 
    $page_num = 0; 
} 

$offset = ($page_num) * $row_page; 

$cn = 31; 

$pg = (int)ceil($cn/$row_page); 

for ($i = 1; $i <= $pg; $i++){ 
    echo "<br/><a href='?p=$i'>".$i; 
} 
Cuestiones relacionadas