Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]Jak niedopuścić do powtarzania liczby?
thomson89
post
Post #1





Grupa: Zarejestrowani
Postów: 1 178
Pomógł: 51
Dołączył: 7.01.2009
Skąd: Gdańsk

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


Witam!

Nie chcę aby liczby się powtarzały, jak to zrobić?

  1. $i = 0;
  2. while($i <= 16)
  3. {
  4. $liczba = rand(0, count($tabela));
  5. //inna czynność która musi być w tej pętli
  6. $i++;
  7. }
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
darko
post
Post #2





Grupa: Zarejestrowani
Postów: 2 885
Pomógł: 463
Dołączył: 3.10.2009
Skąd: Wrocław

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


Ok, zwracam honor, dzięki za teścik.
Hmm..
Ja też zrobiłem teścik w dwóch różnych skryptach, 100 losowanych liczb z przedziału 0-100:
Twój:
  1. $mtime = microtime();
  2. $mtime = explode(" ",$mtime);
  3. $mtime = $mtime[1] + $mtime[0];
  4. $starttime = $mtime;
  5. ////////////////////////////////////////
  6. $x = 0; // Przedział - od
  7. $y = 100; // Przedział - do
  8.  
  9. $z = 100; // Ilość liczb
  10.  
  11. function los(&$x, &$y, &$z) {
  12. static $v=0;
  13. static $arr=array();
  14.  
  15. if ($z != $v) {
  16. $l = rand($x, $y);
  17. if (!in_array($l, $arr)) {
  18. $arr[] = $l;
  19. $v++;
  20. }
  21.  
  22. los($x, $y, $z);
  23. }
  24.  
  25. return $arr;
  26. }
  27.  
  28. echo '<pre>';
  29. print_r(los($x, $y, $z));
  30.  
  31. ///////////////////////////////////////
  32. $mtime = microtime();
  33. $mtime = explode(" ",$mtime);
  34. $mtime = $mtime[1] + $mtime[0];
  35. $endtime = $mtime;
  36. $totaltime = ($endtime - $starttime);
  37. echo "This page was created in ".number_format($totaltime, 10)." seconds";

This page was created in 0.0198168755 seconds
a nawet:
This page was created in 0.0250329971 seconds

mój:
  1. $mtime = microtime();
  2. $mtime = explode(" ",$mtime);
  3. $mtime = $mtime[1] + $mtime[0];
  4. $starttime = $mtime;
  5. ////////////////////////////////////////
  6. $i = 0;
  7. $temp = array();
  8. $przedzial = 100;
  9. $randomize = true;
  10. while($i <= $przedzial)
  11. {
  12. while($randomize) {
  13. if(!in_array($liczba = mt_rand(0, /*count($tabela)*/$przedzial), $temp)) {
  14. $temp[] = $liczba;
  15. $randomize = false;
  16. // ze względów "wydajnościowych" ;) dodaję poniższą linię kodu:
  17. unset($liczba);
  18. }
  19. }
  20. echo "i: ".$i." liczba: ".$liczba."<br/>";
  21. //inna czynność która musi być w tej pętli
  22. $i++;
  23. $randomize = true;
  24. }
  25. // ze względów "wydajnościowych" ;) dodaję poniższą linię kodu:
  26. unset($przedzial, $i, $temp, $randomize);
  27. ///////////////////////////////////////
  28. $mtime = microtime();
  29. $mtime = explode(" ",$mtime);
  30. $mtime = $mtime[1] + $mtime[0];
  31. $endtime = $mtime;
  32. $totaltime = ($endtime - $starttime);
  33. echo "This page was created in ".number_format($totaltime, 10)." seconds";

This page was created in 0.0054590702 seconds
a nawet po którymś odświeżeniu strony wyszło
This page was created in 0.0044279099 seconds
Podtrzymuję zatem, swoje zdanie.
ps. podejrzewam, że gdybym jeszcze u siebie zakomentował linię 20. zamiast pluć echo w każdej iteracji i zamiast tego dałbym na samym końcu print_r($temp); wynik byłby jeszcze lepszy (IMG:style_emoticons/default/smile.gif) Tak czy siak niech już ~thomson89 wybierze sobie bardziej optymalne rozwiązanie.

Ten post edytował darko 21.02.2010, 12:50:30
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: 4.10.2025 - 00:53