Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Podział na grupy
Krzychur
post
Post #1





Grupa: Zarejestrowani
Postów: 214
Pomógł: 0
Dołączył: 3.01.2004
Skąd: Łódź

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


Witam!

Zakładamy, że są 3 liczby naturalne X, Y, Z.

X to ilość elementów w pewnym zbiorze
Y to ilość grup, na które chcemy ten zbiór podzielić
Z to nr grupy, którą chcemy wyświetlić

Dzieląc np. 83 na 5 grup zostanie nam troszkę reszty (3), więc tą trójkę rozkładamy pojedynczo na 3 pierwsze grupy więc powstają nam takie grupy:

1 = od 0 do 16
2 = od 17 do 33
3 = od 34 do 50
4 = od 51 do 66
5 = od 67 do 82

Numery tak naprawdę przedstawiają indexy w tablicach, które tworzone są automatycznie, stąd fakt, że pierwsza grupa zaczyna się zerem, a ostatnia kończy się 82.

Stworzyłem na szybko taką funkcje, która zwraca mi tablicę z odpowiadającymi indexami danej grupy, powiedzcie czy zrobilibyście to zupełnie inaczej, czy... czekam na uwagi.

  1. <?php
  2. function part($count,$groups,$group) {
  3. $min = floor($count / $groups);
  4.  
  5. if ($group <= $count - $min * $groups) {
  6. $to = ($min + 1) * $group;
  7. $from = $to - $min;
  8. }
  9. else {
  10. $from = $count - $min * ($groups - $group + 1) ;
  11. $to = $from + $min;
  12. $from++;
  13. }
  14.  
  15. $array = array();
  16. for ($i = $from; $i <= $to; $i++) {
  17. $array[] = $i - 1;
  18. }
  19.  
  20. return $array;
  21. }
  22. ?>


Pozdrawiam!
Krzysiek
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
kszychu
post
Post #2





Grupa: Przyjaciele php.pl
Postów: 2 712
Pomógł: 23
Dołączył: 27.10.2003
Skąd: z kontowni

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


Ja bym to zrobił tak:
  1. <?php
  2. for($i = 0; $i < $y; $i++) {
  3. $wynik[$i] = 0;
  4. }
  5. while($x > 0) {
  6. for($i = 0; $i < $y; $i++) {
  7. $wynik[$i]++;
  8. $x--;
  9. if($x == 0) break;
  10. }
  11. }
  12. print_r($wynik);
  13. ?>
Go to the top of the page
+Quote Post

Posty w temacie


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

 



RSS Aktualny czas: 30.12.2025 - 16:56