2011-01-25 17 views
9

Mam tablicę z danymi, które chcę wyświetlić z paginacją.Jak wykonać podział na strony z tablicy?

$display_array = Array 
(
    [0] => "0602 xxx2", 
    [1] => "0602 xxx3", 
    [2] => 5 // Total= 2+3 
    [3] => "0602 xxx3", 
    [4] => "0602 saa4", 
    [5] => 7 // Total = 3+4 
) 

muszę spróbować coś takiego

function pagination($display_array, $page) 
{ 
    global $show_per_page; 
    $page = $page < 1 ? 1 : $page; 
    $start = ($page - 1) * $show_per_page; 
    $end = $page * $show_per_page; 
    for($i = $start; $i < $end; $i++) 
    { 
     ////echo $display_array[$i] . "<p>"; 
     // How to manipulate this? 
     // To get the result as I described below. 
    } 
} 

chcę zrobić stronicowanie, aby uzyskać oczekiwany rezultat takiego:

Gdybym określić $show_per_page = 2; następnie pagination($display_array, 1); wyjścia:

0602 xxx2 
0602 xxxx3 
Total:5 

I paganation($display_array, 2); wyjścia:

0602 xxx3 
0602 saa4 
Total:7 

Jeśli określenie $show_per_page = 3;, następnie pagination($display_array, 1); wyjścia:

0602 xxx2 
0602 xxxx3 
Total: 5 
0602 xxx3 

I paganation($display_array, 2); wyjścia:

0602 saa4 
Total:7 

Jeśli określenie $show_per_page = 4; wyjść:

0602 xxx2 
0602 xxxx3 
Total:5 
0602 xxx3 
0602 saa4 
Total: 7 
+1

Więc jakie jest twoje pytanie? A może szukasz kogoś, kto wykona swoją pracę? –

+0

Czy możesz opisać, co chcesz manipulować? – Gajahlemu

+0

$ end = $ start + $ show_per_page; pewno? –

Odpowiedz

15

Wystarczy popatrzeć na to:

function paganation($display_array, $page) { 
     global $show_per_page; 

     $page = $page < 1 ? 1 : $page; 

     // start position in the $display_array 
     // +1 is to account for total values. 
     $start = ($page - 1) * ($show_per_page + 1); 
     $offset = $show_per_page + 1; 

     $outArray = array_slice($display_array, $start, $offset); 

     var_dump($outArray); 
    } 

    $show_per_page = 2; 

    paganation($display_array, 1); 
    paganation($display_array, 2); 


    $show_per_page = 3; 
    paganation($display_array, 1); 
    paganation($display_array, 2); 

wyjście jest:

// when $show_per_page = 2; 
array 
    0 => string '0602 xxx2' (length=9) 
    1 => string '0602 xxx3' (length=9) 
    2 => int 5 
array 
    0 => string '0602 xxx3' (length=9) 
    1 => string '0602 saa4' (length=9) 
    2 => int 7 

// when $show_per_page = 3; 
array 
    0 => string '0602 xxx2' (length=9) 
    1 => string '0602 xxx3' (length=9) 
    2 => int 5 
    3 => string '0602 xxx3' (length=9) 
array 
    0 => string '0602 saa4' (length=9) 
    1 => int 7 

Wyjście do $ show_per_page = 3 jest inny niż twój, ale nie jestem pewien, czego się spodziewasz? Chcesz pobrać wszystko, co pozostało (tj. "0602 saa4" i 7) plus jeden poprzedni element (tj. "0602 xxx3")?

+0

dla innego przypadku ok, ale mam test, $ show_per_page = 4 Nie dostałem całości. – kn3l

+0

i $ show_per_page = 1 Dostałem dwa wyświetlacze entris, w rzeczywistości powinno być tylko jedno wejście. – kn3l

+0

I dlaczego $ offset = $ show_per_page + 1, Ponieważ nie zawsze tak jest. MARCIN – kn3l

0

$ output = array_slice ($ inputArray, $ page-1, $ showPerPage); $ wyjście będzie zawierało żądany interwał. $ total = sizeof ($ inputArray);/całkowite elementy w tablicy/

+1

dlaczego total = sizeof ($ inputArray) ;? – kn3l

4

Zastosowanie array_chunk:

function paginate($array, $pageSize, $page = 1) 
{ 
    $pages = array_chunk($array, $pageSize); 
    return $page > sizeof($pages) ? [] : $pages[$page - 1]; 
} 

lub użyć do czyszczenia wersję Marcina odpowiedź:

function paginate($array, $pageSize, $page = 1) 
{ 
    $page = $page < 1 ? 1 : $page; 
    $start = ($page - 1) * $pageSize; 
    return array_slice($array, $start, $pageSize); 
} 
+0

pomysł array_chunk jest bardzo miły, dzięki za to. . . teraz, aby na tej podstawie zbudować system menu. :) –

+1

@MichaelTunnell serdecznie zapraszamy. – PHPst

Powiązane problemy