Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: losowanie bez powtórzeń
Forum PHP.pl > Forum > PHP
ktosia
Witam
Mam problem z napisaniem skryptu, który losowałby liczby bez powtórzeń
Tzn. chodzi o to że mam tablice np. 50 elementową, której zawartością mają być losowo wybrane liczby z przedziału (1,500) tak aby się nie powtarzały …
Domyślam się ze powinnam losować z tablicy i wyrzucać wcześniej wylosowane elementy ... ale nie wiem jak to zrobić ... :/ na razie wymęczyłam takie coś:

  1. <?php
  2. $tablica = array();
  3. srand ((double) microtime() * 1000000);
  4. for ($i=0; $i<20; $i++)
  5. {
  6.  $p=1;//poczętek zakresu
  7.  $k=500;//koniec zakresu
  8.  $z = rand($p,$k);
  9.  $tablica[$i]=$z; 
  10.  }
  11. print_r ($tablica);
  12.  
  13. ?>


Bardzo proszę o pomoc smile.gif
mike
  1. <pre>
  2. <?php
  3.  
  4. $arrTable = array();
  5.  
  6. while( count( $arrTable ) < 50 )
  7. {
  8. $intItem = rand( 1, 500 );
  9.  
  10. if( ! in_array( $intItem, $arrTable ) )
  11. {
  12. $arrTable[] = $intItem;
  13. }
  14.  
  15. }
  16.  
  17. print_r( $arrTable );
  18.  
  19. ?>
  20. </pre>
dr_bonzo
A jaka to ma zlozonosc obliczeniowa? Jaka mam gwarancje ze skrypt sie zakonczy?

Cytat
<?php

$N = 500;
$i = 50;

$numbers = array_keys( array_fill( 1, $N, 0 ) ); // $N nie 50 smile.gif
print_r( $numbers );
$drawnNumbers = array_rand( $numbers, $i );
print_r( $drawnNumbers );
?>
mike
Cytat(dr_bonzo @ 2006-04-04 20:41:56)
A jaka to ma zlozonosc obliczeniowa?
Dużą. Za dużą. Ale jest to naprostsze podejście do tematu tongue.gif

Cytat(dr_bonzo @ 2006-04-04 20:41:56)
Jaka mam gwarancje ze skrypt sie zakonczy?
O ile losujesz X elementów ze zbioru o mocy Y i X<=Y to się skończy zawsze biggrin.gif
dr_bonzo
Ale masz do czynienia prawdopodobienstwem: od wynikow losowan bedzie zalezalo jak dlugo skrypt bedzie sie wykonywal -- przeciez mozesz nigdy nie dostac np. 50tej innej liczby (male sa na to szanse ale trzeba ta okolicznosc uwzglednic).

: D
ktosia
ooo dzięki smile.gif
wszystko ładnie działa smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.