Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Funkcja rand
Forum PHP.pl > Forum > Przedszkole
_Martin_
Hej mam pytanko odnośnie funkcji RAND()
Czy jeżeli w zmiennej $ile mam np liczbę stałą 2250
to czy jest możliwość wylosowania (Losową) liczbę ale... np w przedziale 50-100% wartości tej liczby np 74% z 2250 albo 59% z 2250

To pierwsze pytanie

I Czy jest możliwość wstawienia przedziałów w tablice np
  1. <?php
  2. // Array(Numer przedzialu - Rand min - Rand max
  3.  $przedzial= Array(
  4.      '1' => array('70%', '100%'),
  5.      '2' => array('45%', '100%'),
  6.      '3' => array('20%', '100%'),
  7.      '4' => array('5%',  '100%')
  8.  );
  9. ?>



Pozdrawiam i czekam na odpowiedź
skowron-line
Musze powiedzieć że średnio rozumiem co masz na myśli no ale procentowo wylosować przedział to pestka

przedzial 30% - 70%

  1. <?php
  2. $liczba = 2250;
  3.  
  4. $p1 = ( $liczba * 30 ) / 100;
  5. $p2 = ( $liczba * 70 ) / 100;
  6.  
  7. echo rand( $p1, $p2 );
  8. ?>
kefirek
Robisz tak

  1. <?php
  2. $liczba = 2250;
  3. $polowa = $liczba / 2;
  4. $losowa_liczba = rand($polowa, $liczba);
  5. $ile_procent = ceil($polowa * 100 / $losowa_liczba);
  6. echo $ile_procent.' %';
  7. ?>


Krótkie wyjaśnienie by nie było że dałem gotowca a nic z tego nie wiesz.

Czyli tak jak wiadome 50% to połowa liczby czyli dzielisz 2250 na 2 za pomocą operatora /
Potem losujesz liczbę od połowy do 2250
Na końcu liczysz ile procent ma ta wylosowana liczba czyli połowę z 2250 mnożysz razy 100 i dzielisz przez wylosowaną liczbę. Na końcu używasz CEIL do zaokrąglenia do liczby całkowitej by pozbyć się przecinków. Czyli w ostateczności masz np. wynik 60%


EDIT jak pisałem tego posta nie było odpowiedz żeby nie było ze się wciąłem
_Martin_
Ok super.

Dzięki koledźy a jak by ktoś nie zrozumiał to chodzi o 2 pkt tzn
Bo teraz on losuje losowo!%
A Ja chce po prostu mieć w tablicy jakiś przedział i za pomocą if oraz else będe wybierał przedział z tablicy smile.gif
Po starams ie przerobić wasz kod tak że dziękuje smile.gif
piotrooo89
tablice wielowymiarowe?

  1. <?php
  2. $tab = array('przedzial' => array('5%', '10%'));
  3. ?>


mam nadzieje że wiesz jak się poruszać po tych tablicach?

jak nie polecam: http://phpedia.pl/wiki/Tablice
_Martin_
Przyjacielu pikaczu smile.gif
Zobacz na mój 1 post smile.gif Tam zrobiłęm identyczną tablice smile.gif
Tak ze wiem jak się poruszać...
Troszke się wygłupiłem bo czekałem na gotowca ale poradźę sobie na gotowcu się nie nauczę hehe smile.gif
piotrooo89
Cytat(_Martin_ @ 28.02.2009, 12:56:58 ) *
Zobacz na mój 1 post smile.gif Tam zrobiłęm identyczną tablice smile.gif


o jaa pier... za długo chyba przed monitorem, sory na serio tego nie widziałem. problem mnie zainteresował wiec zrobiłem coś takiego:

  1. <?php
  2. $tab = array('przedzial' => array('5% 10%'));
  3.  
  4. foreach($tab['przedzial'] as $value => $prze)
  5. {
  6.    $p = explode(' ', $prze);
  7.    echo 'od '.$p[0].' do '.$p[1];
  8. }
  9. ?>
_Martin_
Supcio ja zrobiłem to troszke w inny sposób ale zaraz przetestuje twój smile.gif

Pikaczu zrobiłem tak

  1. <?php
  2. $ilek = $jeden+$dwa+$trzy;
  3.  
  4.  
  5. $przedzial = Array(
  6.     '1' => array('70', '100'),
  7.     '2' => array('45', '100'),
  8.     '3' => array('20', '100'),
  9.     '4' => array('5',  '100')
  10. );
  11. $aLiga = $zap['liga'];
  12. $liga = explode('_', $aLiga);
  13.  
  14.  
  15.  
  16.  
  17.  
  18.  
  19. if($liga == "1"){
  20. $p1 = ( $ilek * $przedzial[1][0] ) / 100;
  21. $p2 = ( $ilek * $przedzial[1][1] ) / 100;
  22.  
  23. $kibice = rand( $p1, $p2 );
  24. echo $kibice;
  25. }
  26. elseif($liga == "2"){
  27.    $p1 = ( $ilek * $przedzial[2][0] ) / 100;
  28.    $p2 = ( $ilek * $przedzial[2][1] ) / 100;
  29.  
  30. $kibice = rand( $p1, $p2 );
  31. echo $kibice;
  32. }
  33. elseif($liga == "3"){
  34.    $p1 = ( $ilek * $przedzial[3][0] ) / 100;
  35.    $p2 = ( $ilek * $przedzial[3][1] ) / 100;
  36.  
  37. $kibice = rand( $p1, $p2 );
  38. echo $kibice;
  39. }
  40. else{
  41.    $p1 = ( $ilek * $przedzial[4][0] ) / 100;
  42.    $p2 = ( $ilek * $przedzial[4][1] ) / 100;    
  43.  
  44. $kibice = rand( $p1, $p2 );
  45. echo $kibice;
  46. }
  47. ?>


Co ty na to?
megawebmaster
Głupota. Dorobiłeś mnóstwo kodu, który mógłbyś zastąpić prostym rozwiązaniem:
  1. <?php
  2. $ilek = $jeden+$dwa+$trzy;
  3.  
  4. $przedzial = Array(
  5.    '1' => array('70', '100'),
  6.    '2' => array('45', '100'),
  7.    '3' => array('20', '100'),
  8.    '4' => array('5',  '100')
  9. );
  10. $aLiga = $zap['liga'];
  11. $liga = explode('_', $aLiga);
  12. if(!in_array($liga,$przedzial)) $liga = '4';
  13.  
  14. $p1 = ( $ilek * $przedzial[$liga][0] ) / 100;
  15. $p2 = ( $ilek * $przedzial[$liga][1] ) / 100;
  16.  
  17. $kibice = rand( $p1, $p2 );
  18. echo $kibice;
  19. ?>


EDIT: Nie zauważyłem, że tam jest jeszcze defaultowe rozwiązanie - no to zmieniam troszkę kod winksmiley.jpg
_Martin_
Dlaczego głupota.Uraziłeś mnie troche he.
Ja ci powiem że dopiero uczę się i rozwiązuje to na sposób jaki umiem ale dziękuje sprawdzę to smile.gif
P.S Dziękuje!
megawebmaster
Wybacz. Po prostu musisz starać się myśleć o tym, że kod powinien być efektywny, a nie tylko działać. Poza tym - dla takiej konstrukcji jak podałeś powinno się używać switch'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.