Pracuję nad uniwersalną funkcją, która znajdzie mi odpowiedni przedział dla liczb. W późniejszym etapie chcę wykorzystać ją do paginacji.
function get_id_start($num_items, $id) { $board_config['adverts_per_page'] = 10; // ile wyników na stronę if ( $id <= 0 ) { return 0; } $floor_num = $num_items; // wszystkich wyników do wyświetlenia $floor_num += (10-($floor_num%10)); // zaokrąglamy w górę wszystkie wyniki - do dziesiątek, czyli liczba 31 jest równa 40 itd. for($i=0; $i<=($total_pages-1); $i++) { $start = $floor_num-(($i+1)*$board_config['adverts_per_page']); $end = $floor_num-($i*$board_config['adverts_per_page']); if ( $id >= $start && $id <= $end ) { return $start; } else if ( $i == 0 && $id > $end ) { return $start; } } }
Powyższa funkcja ma znaleźć przedział dla liczby 7, gdzie wszystkich wyników do wyświetlenia w sumie jest 31, a wyników na stronę ma być 10.
Pętla for zwraca coś mniej więcej takiego:
30 -> 40
20 -> 30
10 -> 20
0 -> 10
Czyli ta nasza siódemka mieści się w przedziale 0 - 10 (bo jest mniejsza od 10 i większa od 0).
Problem zaczyna się ze wspomnianą uniwersalnością... Próbując znaleźć przedział dla liczby 7, gdzie wszystkich wyników do wyświetlenia mamy 31, a wyników na stronę 3 (tutaj zmiana względem powyższego przykładu), wychodzą mi jakieś totalne głupoty. Mam funkcję, która dla tej trójki znajduje wszystkie przedziały poprawnie:
function get_id_start($num_items, $id) { $board_config['adverts_per_page'] = 3; if ( $id <= 0 ) { return 0; } for($i=0; $i<=($total_pages-1); $i++) { $start = $num_items-(($i+1)*$board_config['adverts_per_page']); $end = $num_items-($i*$board_config['adverts_per_page']); if ( $id >= $start && $id <= $end ) { return $start; } else if ( $i == 0 && $id > $end ) { return $start; } } }
Funkcja zwróci przedziały:
28 --> 31
25 --> 28
22 --> 25
19 --> 22
16 --> 19
13 --> 16
10 --> 13
7 --> 10
4 --> 7
1 --> 4
a więc siódemka wchodzi w przedział 4 - 7.
Obie funkcje nie współpracują ze sobą, wypluwając błędnę wartości dla innych argumentów niż zaprezentowane przeze mnie powyżej.
Czy ktoś by mi mógł pomóc z tą matematyką, tak aby stworzyć jedną funkcję, która będzie uniwersalna (czyt. wypluwała dobre wartości, niezależnie od argumentów)?
