Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Losowanie rand()
Forum PHP.pl > Forum > PHP
Grimor
Witam!

Otoz mam nastepujacy problem. Chce napisc skrypt ktory losowalby codzinnie inna liczbe z zakresu 1-37 (liczby nie moga sie powtarzac w danym miesiacu)

Naprawde nie wiem jak sie za to zabrac, jestem dosc poczatkujacy w PHP, znam funkcje rand(), tylko nie wiem jak zrobic aby codziennie liczba sie zmieniala i nie powtarzala sie w danym miesiacu, a po miesiacu jakby nastepowal reset, i liczby by mogly sie znowu powtarzac. Z Gory dzieki za pomoc
starach
Pobierz datę losując liczbę.
Przed losowaniem sprawdź czy data aktualna nie jest taka sama jak zapisana. ( zapisuj datę )
Jeśli dzisiaj jest 1 dzień w miesiącu wyczyść zapisane już wyniki - pamiętaj żeby to robić tylko raz pierwszego dnia miesiąca co sprowadza się do kolejne instrukcji warunkowej.

edit>
http://pl2.php.net/manual/pl/function.date.php
Jeśli chodzi o zapisywanie daty i wyników losowań to pozostaje albo baza danych albo plik tekstowy.
Grimor
o dzieki haha.gif dobry pomysl nie wpadlem na to haha.gif jak cos to jeszce bede pisal.
heaven
  1. <?php
  2. function getRan() {
  3.  srand((int)date('mY',time()));
  4.  $Arr = array();
  5.  for ($i = 0; $i < (int)date('j',time()); $i++) {
  6.  do {
  7.  $ran = rand(1,37);
  8.  } while(in_array($ran,$Arr));
  9.  array_push($Arr,$ran);
  10.  }
  11.  return $ran;
  12.  }
  13. ?>

Każdego dnia ta funkcja bedzie ci zwracac losowa liczbe. Nie musisz zapamietywac zadnej daty. pozdr.
Grimor
hmmm ale liczby beda sie powtarzac w danym miesiacu?? Bo chce zeby sie nie powtarzaly w danym miesiacu. Dopiero na poczatku nastepnego nastepowal reset i wtedy od nowa.
heaven
jest tak jak chciales masz tu przyklad dla lutego tego roku
1-02-2007 : 4
2-02-2007 : 33
3-02-2007 : 25
4-02-2007 : 27
5-02-2007 : 13
6-02-2007 : 11
7-02-2007 : 2
8-02-2007 : 24
9-02-2007 : 3
10-02-2007 : 29
11-02-2007 : 31
12-02-2007 : 10
13-02-2007 : 26
14-02-2007 : 5
15-02-2007 : 21
16-02-2007 : 9
17-02-2007 : 19
18-02-2007 : 22
19-02-2007 : 7
20-02-2007 : 37
21-02-2007 : 18
22-02-2007 : 15
23-02-2007 : 14
24-02-2007 : 23
25-02-2007 : 20
26-02-2007 : 35
27-02-2007 : 12
28-02-2007 : 30 CZYLI DZISIAJ TA FUNKCJA BEDZIE ZWRACAC 30

a to dla marca

1-03-2007 : 5
2-03-2007 : 6
3-03-2007 : 15
4-03-2007 : 29
5-03-2007 : 26
6-03-2007 : 8
7-03-2007 : 2
8-03-2007 : 33
9-03-2007 : 12
10-03-2007 : 1
11-03-2007 : 18
12-03-2007 : 14
13-03-2007 : 16
14-03-2007 : 32
15-03-2007 : 23
16-03-2007 : 17
17-03-2007 : 31
18-03-2007 : 4
19-03-2007 : 20
20-03-2007 : 22
21-03-2007 : 37
22-03-2007 : 9
23-03-2007 : 13
24-03-2007 : 35
25-03-2007 : 28
26-03-2007 : 36
27-03-2007 : 10
28-03-2007 : 11
29-03-2007 : 25
30-03-2007 : 27
31-03-2007 : 3
czyli mozna z gory przewidzec co bedzie ktorego dnia smile.gif
ale mozesz zmienic zeby mimo wszystko wygenerowalo inne liczby przez dodanie jakiejs liczby do 3 liniki (np. pomnozenie przez 56)
  1. <?php
  2. srand((int)date('mY',time())*56)
  3. ?>

i teraz liczby w marcu beda takie
1-03-2007 : 19
2-03-2007 : 10
3-03-2007 : 25
4-03-2007 : 2
5-03-2007 : 13
6-03-2007 : 31
7-03-2007 : 17
8-03-2007 : 24
9-03-2007 : 15
10-03-2007 : 28
11-03-2007 : 3
12-03-2007 : 29
13-03-2007 : 27
14-03-2007 : 16
15-03-2007 : 30
16-03-2007 : 5
17-03-2007 : 32
18-03-2007 : 6
19-03-2007 : 11
20-03-2007 : 18
21-03-2007 : 20
22-03-2007 : 14
23-03-2007 : 9
24-03-2007 : 21
25-03-2007 : 1
26-03-2007 : 33
27-03-2007 : 23
28-03-2007 : 7
29-03-2007 : 34
30-03-2007 : 37
31-03-2007 : 22

pozdrawiam


Wymyśliłem jeszcze szybsza i krótszą funkcję
  1. <?php
  2. function getRan() {
  3.  srand((int)date('mY',time()));
  4.  $Arr = range(1,37);
  5.  shuffle($Arr);
  6.  return $Arr[(int)date('j',time())];
  7.  }
  8. ?>

Działa w ten sam sposób tylko liczba wygenerowana na dzisiaj bedzie 1 czyli inna niz w funkcji poprzedniej. Dziala na 100% tak jak tego oczekujesz
Grimor
Spoko, ty masz leb do tego haha.gifD jeszce calego kodu nie rozumiem ale spruboje go przeanalizowac i doczytac. Dzieki haha.gifD A tak btw. dzisiaj nie zwrocilo 30 tylko 36 haha.gifD

PS. Jeszce mozesz mi powiedzec jak to wyliczles haha.gifD ZEbym mogl ustawiac czasami numerki haha.gif

link do skryptu http://grimor.nhost.pl/losowanie2.php
heaven
No widocznie mamy różne wersje PHP lub moze na innym systemie bo generato liczb losowych mimo tego samego argumentu funkcji srand inaczej rozklada liczby w funkcji shuffle. A jesli chodzi o zmiane liczby to mozesz zmienic dzisiejsza liczbe przez np.dodanie jakiejs liczby w argumencie funkcji srand (pisalem ci juz o tym) ale nie ma mozliwosci aby sztywno ustawic na taki numerek jak sie chce (no cyba ze metodą prób i błędów). trzeba dodawac jakies losowe liczby i patrzyc na rozklad. no ale to maja byc losowe liczby a nie Twoje tongue.gif
  1. <?php
  2. srand((int)date('mY',time())*56); //teraz zmieni sie wynik funkcji na kolejne dni
  3. //lub
  4. srand((int)date('mY',time())+2); // a teraz jeszcze inny
  5. ?>
przemokrosno
czy jest jakiś sposób aby wyświetlić wynik losowania o określonej godzinie??
kacka
  1. <?php
  2. if (date("H") >= 14) { echo 'cos'; }
  3. ?>
kdr
Korzystając z okazji istniejącego tematu chciałbym prosić o radę w poprawieniu poniższego skryptu:
CODE
<?PHP
$banner['1']['link']='1232405200';
$banner['1']['plik']='8023-01';

$banner['2']['link']='1232405675';
$banner['2']['plik']='8076-01';

$banner['3']['link']='1232419705';
$banner['3']['plik']='9005-01';

$banner['4']['link']='1232461400';
$banner['4']['plik']='5303-01';

$banner['5']['link']='1232461696';
$banner['5']['plik']='8092-01';

$banner['6']['link']='1232462544';
$banner['6']['plik']='7313-01';

$banner['7']['link']='1232499693';
$banner['7']['plik']='5301-01';

$banner['8']['link']='1232499693';
$banner['8']['plik']='5301-01';

$banner['9']['link']='1232500616';
$banner['9']['plik']='8054-01';

$banner['10']['link']='1232500616';
$banner['10']['plik']='8002-01';

$banner['11']['link']='1232509349';
$banner['11']['plik']='9008-01';

$wynik=count($banner);
$losowanie=rand(1,$wynik);

echo"
<a href=\"transportphoto.php?subaction=showfull&id=$banner[$losowanie]['link']\"><img src=\"http://00.unl.pl/images/?m=$banner[$losowanie]['plik']\" border=\"0\" alt=\"\"></a>
";


?>


Niestety efekt tego kodu jest następujący:
  1. <a href="transportphoto.php?subaction=showfull&id=Array['link']"><img src="http://00.unl.pl/images/?m=Array['plik']" border="0" alt=""></a>

A powinien wyświetlać losowy obraz z tablicy asocjacyjnej zamieszczonej powyżej, np:
  1. <a href="transportphoto.php?subaction=showfull&id=1232462544"><img src="http://00.unl.pl/images/?m=7313-01" border="0" alt=""></a>

Co zrobiłem nie tak?
djstrong
Wstaw zmienne "osobno":

  1. <?php
  2. <a href="transportphoto.php?subaction=showfull&id='.$banner[$losowanie]['link'].'"><img src="http://00.unl.pl/images/?m='.$banner[$losowanie]['plik'].'" border="0" alt=""></a>
  3. ';
  4. ?>


PHP wypisywał zmienną $banner[$losowanie], a ['link'] traktował jako tekst.
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.