Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [php]Generowanie x losowych liczb z zakresu, i żeby się nie powtarzały...
Master Miko
post
Post #1





Grupa: Zarejestrowani
Postów: 530
Pomógł: 0
Dołączył: 15.01.2005
Skąd: Warszawa

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


Witam. mam taki problem. Generuję sobie dowolną liczbę tak:

  1. <?php
  2.  
  3. $rand = mt_rand(1,$num_rows);
  4.  
  5. ?>


lecz mam problem, bo chciałbym wygenerować x różnych liczb nie powtarzających się

NP:
Jeśli $num_rows = 10 , a x = 3
to
1 liczba to 2
2 liczba to 7
3 liczba to 8
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 5)
mdco
post
Post #2





Grupa: Zarejestrowani
Postów: 324
Pomógł: 5
Dołączył: 14.12.2004

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


  1. <?php
  2. //$x - Twoja liczba x;
  3. $set = array(); // Tablica z wylosowanymi liczbami
  4.  
  5. while(1) {
  6.  $rand = mt_rand(1,$num_rows);
  7.  
  8.  if(!in_array($rand, $set)) {
  9. $set[] = $rand;
  10.  }
  11.  
  12.  if(count($set)==$x) 
  13.  break;
  14. }
  15. ?>


Ten post edytował mdco 21.05.2006, 09:13:12
Go to the top of the page
+Quote Post
Master Miko
post
Post #3





Grupa: Zarejestrowani
Postów: 530
Pomógł: 0
Dołączył: 15.01.2005
Skąd: Warszawa

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


Dzięki. Myślałem, że w php jest do tego specjalna funkcja.
poradziłem sobie tak:

  1. <?php
  2.  
  3. // $number to ilosc ile ma byc wygenerowanych
  4. // $allowed to tablica zawierająca numery które są dopuszczone (pobierane z tabeli mysql)
  5.  
  6. function manyRand($number,$allowed) {
  7.  
  8. $arrayReturn = array();
  9. $end = count($allowed);
  10. $start = 1;
  11. while ($number > 0) {
  12.     $rand = mt_rand($start,$end);
  13.     if(!in_array($rand,$arrayReturn)) { $arrayReturn[$number] = $allowed[$rand]; $number--; }
  14. }
  15.  
  16. return $arrayReturn;
  17. }
  18.  
  19. ?>


@Niestety pomimo zabezpieczenia !in_array raz mi wyskoczyło:

Kod
array(3) { [3]=> string(3) "138" [2]=> string(3) "311" [1]=> string(3) "311" }


czyli się powtórzyło :/

Ten post edytował Master Miko 21.05.2006, 12:15:59
Go to the top of the page
+Quote Post
mdco
post
Post #4





Grupa: Zarejestrowani
Postów: 324
Pomógł: 5
Dołączył: 14.12.2004

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


Jakoś dziwnie to zrobiłeś. Zrób moim sposobem. Mnie działa bez powtorzeń.
Go to the top of the page
+Quote Post
em1X
post
Post #5





Grupa: Zarejestrowani
Postów: 984
Pomógł: 41
Dołączył: 16.03.2002
Skąd: Płock

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


(IMG:http://forum.php.pl/style_emoticons/default/withstupidsmiley.gif) Ktoś tu nie czyta manuala...

  1. <?php
  2. function uniqueArray(& $allowed, $count)
  3. {
  4. $tab = array();
  5. $keys = array_rand($allowed, $count);
  6.  
  7. for ($i=0; $i<count($keys); $i++)
  8. $tab[] = $allowed[$keys[$i]];
  9.  
  10. return $tab;
  11. }
  12.  
  13. $numbers = array(10,20,3,6,7,99,102);
  14. $random = uniqueArray($numbers, 5);
  15.  
  16. print '<pre>';
  17. print_r ($random);
  18. print '</pre>';
  19.  
  20. ?>
Go to the top of the page
+Quote Post
Master Miko
post
Post #6





Grupa: Zarejestrowani
Postów: 530
Pomógł: 0
Dołączył: 15.01.2005
Skąd: Warszawa

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


No właśnie... dobrałem się też do funkcji array_rand tylko jakoś jej nie doceniłem, bo wcześniej nie miałem gotowej tablicy z której mam wybierać.
dzięki em1x

Ten post edytował Master Miko 21.05.2006, 14:10:51
Go to the top of the page
+Quote Post

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: 23.08.2025 - 17:17