Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Problem ze znalezieniem odpowiedniego przedziału
Majkelo23
post
Post #1





Grupa: Zarejestrowani
Postów: 226
Pomógł: 17
Dołączył: 13.02.2012

Ostrzeżenie: (0%)
-----


Witam!

Pracuję nad uniwersalną funkcją, która znajdzie mi odpowiedni przedział dla liczb. W późniejszym etapie chcę wykorzystać ją do paginacji.

  1. function get_id_start($num_items, $id)
  2. {
  3. $board_config['adverts_per_page'] = 10; // ile wyników na stronę
  4.  
  5. $id = intval($id);
  6.  
  7. if ( $id <= 0 )
  8. {
  9. return 0;
  10. }
  11.  
  12. $total_pages = ceil($num_items/$board_config['adverts_per_page']); // ile będzie wszystkich stron
  13. $floor_num = $num_items; // wszystkich wyników do wyświetlenia
  14. $floor_num += (10-($floor_num%10)); // zaokrąglamy w górę wszystkie wyniki - do dziesiątek, czyli liczba 31 jest równa 40 itd.
  15.  
  16. for($i=0; $i<=($total_pages-1); $i++)
  17. {
  18. $start = $floor_num-(($i+1)*$board_config['adverts_per_page']);
  19. $end = $floor_num-($i*$board_config['adverts_per_page']);
  20.  
  21. if ( $id >= $start && $id <= $end )
  22. {
  23. return $start;
  24. }
  25. else if ( $i == 0 && $id > $end )
  26. {
  27. return $start;
  28. }
  29. }
  30. }
  31.  
  32. var_dump(get_id_start(31, 7));


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:

  1. function get_id_start($num_items, $id)
  2. {
  3. $board_config['adverts_per_page'] = 3;
  4.  
  5. $id = intval($id);
  6.  
  7. if ( $id <= 0 )
  8. {
  9. return 0;
  10. }
  11.  
  12. $total_pages = ceil($num_items/$board_config['adverts_per_page']);
  13.  
  14. for($i=0; $i<=($total_pages-1); $i++)
  15. {
  16. $start = $num_items-(($i+1)*$board_config['adverts_per_page']);
  17. $end = $num_items-($i*$board_config['adverts_per_page']);
  18.  
  19. echo $start.' --> '.$end.'<br>';
  20.  
  21. if ( $id >= $start && $id <= $end )
  22. {
  23. return $start;
  24. }
  25. else if ( $i == 0 && $id > $end )
  26. {
  27. return $start;
  28. }
  29. }
  30. }
  31.  
  32. var_dump(get_id_start(31, 7));



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)? smile.gif

Ten post edytował Majkelo23 16.11.2013, 14:10:26
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 06:08