Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Generowanie unikalnej liczby
Rid
post
Post #1





Grupa: Zarejestrowani
Postów: 715
Pomógł: 47
Dołączył: 5.12.2010

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


Znalazłem kod w internecie do generowania unikalnych liczb:
  1. <?php
  2. function rand_except($min, $max, $except)
  3. //function returns a random integer between min and max, just like function rand() does.
  4. // Difference to rand is that the random generated number will not use any of the values
  5. // placed in $except. ($except must therefore be an array)
  6. // function returns false if $except holds all values between $min and $max.
  7. {
  8. //first sort array values
  9. sort($except, SORT_NUMERIC);
  10. //calculate average gap between except-values
  11. $except_count = count($except);
  12. $avg_gap = ($max - $min + 1 - $except_count) / ($except_count + 1);
  13. if ($avg_gap <= 0)
  14. return false;
  15. //now add min and max to $except, so all gaps between $except-values can be calculated
  16. array_unshift($except, $min - 1);
  17. array_push($except, $max + 1);
  18. $except_count += 2;
  19. //iterate through all values of except. If gap between 2 values is higher than average gap,
  20. // create random in this gap
  21. for ($i = 1; $i < $except_count; $i++)
  22. if ($except[$i] - $except[$i - 1] - 1 >= $avg_gap)
  23. return mt_rand($except[$i - 1] + 1, $except[$i] - 1);
  24. return false;
  25. }
  26. ?>
,jednakże czy jest on efektywny ,czy nie lepiej byłoby po prostu użyć mt_rand() i po prostu porównać występowanie liczby w bazie???Zdaje sobie także sprawę ,że to obciąży bazę poprzez liczne połączenia.Co będzie bardziej przymulać questionmark.gif??Druga ,rzecz czy da rady zapisać wygenerowaną liczbę poprzez polecenie ALTER,czy tylko przez INSERT questionmark.gif
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: 21.08.2025 - 03:59