Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]Losowanie cyfry co 24h
mateŁusz
post
Post #1





Grupa: Zarejestrowani
Postów: 102
Pomógł: 0
Dołączył: 21.08.2012

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


A więc mam taki kod:
  1. <?php
  2. $numerek=''; for($i='0';$i<1;$i++){$numerek.=rand(1,38);}
  3. echo $numerek
  4. ?>


Co zrobić, aby cyfra z zakresu 1 - 38 losowała się co 24h? Jak będzie godzina 0.00 to liczba zmienia się sama.
Tak samo.. jak zrobić, aby było, np. że cyfra 14 i 17 ma 30% na wylosowanie się? smile.gif
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 15)
erix
post
Post #2





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




cron i zapisuj sobie wynik w pliku.


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
sowiq
post
Post #3





Grupa: Zarejestrowani
Postów: 1 890
Pomógł: 339
Dołączył: 14.12.2006
Skąd: Warszawa

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


Rozumiem, że poza wylosowaniem, coś z tym numerem dalej robisz - np. zapisujesz w bazie. Bo inaczej to chyba nie ma sensu go losować i zostawiać w pamięci RAM snitch.gif

Masz dwa wyjścia:
1. CRON odpalany co 24 godziny
2. Za każdym razem przy odpaleniu skryptu sprawdzać, czy danego dnia została już wylosowana liczba. Jeśli nie, to najpierw ją losujesz. Jeśli tak, to po prostu odczytujesz.

Co do drugiej części pytania:
  1. rand(1, 100) <= 25 // warunek zwróci TRUE dla ~25% przypadków
Go to the top of the page
+Quote Post
mateŁusz
post
Post #4





Grupa: Zarejestrowani
Postów: 102
Pomógł: 0
Dołączył: 21.08.2012

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


Zastosowanie skryptu jest takie:

- Szczęśliwy numerek w szkole. Jaki numerek wylosuje to osoba z tym numerkiem nie będzie, np. pytana.

CRON - nie mam pojęcia jak to zrobić, ogólnie z pisania skryptów jestem dość słaby.

Serwer na którym stoi strona szkoły nie ma bazy danych.

Propo
  1. rand(1,100) <= 25


25% szans wychodzi tylko dla liczby 1, a jak zrobić, aby było dla liczby 11, a w tym, aby losowało ten zakres 1-38.

Ten post edytował mateŁusz 1.10.2012, 14:54:57
Go to the top of the page
+Quote Post
kyku
post
Post #5





Grupa: Zarejestrowani
Postów: 116
Pomógł: 8
Dołączył: 21.11.2008

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


to zapisuj do pliku
  1. odczyt:
  2.  
  3. echo 'Liczba to: '.file_get_contents('liczba.txt');
  4.  
  5. a tak zapis:
  6.  
  7. file_put_contents('liczba.txt', rand(0,100));
  8.  


Cytat
25% szans wychodzi tylko dla liczby 1, a jak zrobić, aby było dla liczby 11, a w tym, aby losowało ten zakres 1-38.

a czy szansa na wylosowanie 1, 11 czy 99999 jest rozna?...

38 * 25% = 9.5
czyli
  1. if(rand(1,38)<=9.5){


Ten post edytował kyku 1.10.2012, 15:03:57


--------------------
eArena.pl - hosting serwerów gier multiplayer
Go to the top of the page
+Quote Post
mateŁusz
post
Post #6





Grupa: Zarejestrowani
Postów: 102
Pomógł: 0
Dołączył: 21.08.2012

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


No dobra, teraz kwestia zrobić tak, aby cyfra zmieniała się co 24h.. nerdsmiley.png
Go to the top of the page
+Quote Post
kyku
post
Post #7





Grupa: Zarejestrowani
Postów: 116
Pomógł: 8
Dołączył: 21.11.2008

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


cronem:

crontab -e

i dopisujesz

* 0 * * * php /sciezka/do/skryptu.php >/dev/null 2>&1


--------------------
eArena.pl - hosting serwerów gier multiplayer
Go to the top of the page
+Quote Post
mateŁusz
post
Post #8





Grupa: Zarejestrowani
Postów: 102
Pomógł: 0
Dołączył: 21.08.2012

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


Dobra, i tak nie rozumiem nic z tego co piszesz.
Wolę już zlecić komuś, zapłacić i wiedzieć, że będzie działać niż się wkurwiać.
Go to the top of the page
+Quote Post
b4rt3kk
post
Post #9





Grupa: Zarejestrowani
Postów: 1 933
Pomógł: 460
Dołączył: 2.04.2010
Skąd: Lublin

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


Moim zdaniem liczba nie musi losować się automatycznie, bo wystarczyłoby, że jak ktoś wejdzie na stronkę to w tym momencie dopiero sprawdza czy liczba nie jest ta sama dłużej niż 24h i wtedy losuje nową. Jako godzinę wyjściową ustalić np. 00:00.

Data ustalenia pierwszej liczby: 2012-10-01 00:00:00, z datą ważności do 2012-10-01 23:59:59, kolejna byłaby od 2012-10-02 00:00:00, itd. Jeśli przez dzień lub dwa nikt by na stronkę nie wchodził to oczywistym jest, że nie wygenerowałoby kolejnej liczby, ale raczej ludzie bezpośrednio w bazie danych tego sprawdzać nie będą? Ogólnie rzecz biorąc wystarczy ustalić datę ważności nowej liczby na dzień dzisiejszy, do godz 23:59:59, jeśli data ważności poprzedniej już wygasła.

Myślę, że to dosyć prosta metoda.

A co do większej szansy na wylosowanie danej liczby to dodaj wagi liczb, ale wtedy mt_rand się nie sprawdzi, będziesz potrzebował tabeli z liczbami i ich wagami.

  1. $ile = 24 // ile numerków do losowania
  2. $liczba = 10 // który numerek ma mieć większą wagę
  3. $szansa = 0.3 // o ile % większa szansa na wylosowanie
  4. $waga = ceil($ile*$szansa) // waga, może być liczona lub wpisana ręcznie
  5. $tablica = array();
  6.  
  7. for ($i=1; $i<=$ile; $i++) {
  8. if ($i == $liczba) for ($j=1; $j<=$waga; $j++) $tablica[] = $i; else $tablica[] = $i;
  9. }
  10.  
  11. $numer_wylosowany = $tablica[mt_rand(1, sizeof($tablica))];


takie coś mi do głowy przyszło w związku z losowaniem jednej liczby ze zwiększoną szansą.

Ten post edytował b4rt3kk 1.10.2012, 15:34:23


--------------------
Jeśli pomogłem, kliknij proszę 'pomógł'. Dzięki.
Go to the top of the page
+Quote Post
kyku
post
Post #10





Grupa: Zarejestrowani
Postów: 116
Pomógł: 8
Dołączył: 21.11.2008

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


szkoda kasy na cos takiego, trzymaj
  1. <?php
  2.  
  3. $plik = file_get_contents('liczba.txt');
  4. $temp = explode('|', $plik);
  5. if (date('j') == $temp[1]) { // data sie zgadza
  6. $nr = $temp[0];
  7. echo 'Dzisiejszy numerek to: ' . $nr;
  8. } else { // losowanie nowego numerka
  9. $nr = rand(1, 38);
  10. file_put_contents('liczba.txt', $nr . '|' . date('j'));
  11. }
  12.  
  13. ?>


Ten post edytował kyku 1.10.2012, 15:28:23


--------------------
eArena.pl - hosting serwerów gier multiplayer
Go to the top of the page
+Quote Post
mateŁusz
post
Post #11





Grupa: Zarejestrowani
Postów: 102
Pomógł: 0
Dołączył: 21.08.2012

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


O stary, dzięki wielkie.
Wrzucę to na serwer, aby zobaczyć czy się po godzinie 23.59 zmieni cyfra smile.gif

Jakby coś nie działało to napiszę tutaj, jeszcze raz wielkie dzięki smile.gif
Go to the top of the page
+Quote Post
csharp
post
Post #12





Grupa: Zarejestrowani
Postów: 127
Pomógł: 3
Dołączył: 22.04.2012
Skąd: Warszawa

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


no tak ... ale musisz w takim razie uruchamiać go za każdym razem... samo się zmieniać nie będzie.


--------------------
Prywatny blog -> cupial.com.pl
Go to the top of the page
+Quote Post
kyku
post
Post #13





Grupa: Zarejestrowani
Postów: 116
Pomógł: 8
Dołączył: 21.11.2008

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


wystarczy wejść na stronę jeżeli wszystko jest w indexie (a chyba jest)


--------------------
eArena.pl - hosting serwerów gier multiplayer
Go to the top of the page
+Quote Post
Julcio
post
Post #14





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 23.01.2011

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


Cytat(kyku @ 1.10.2012, 16:27:22 ) *
szkoda kasy na cos takiego, trzymaj
  1. <?php
  2.  
  3. $plik = file_get_contents('liczba.txt');
  4. $temp = explode('|', $plik);
  5. if (date('j') == $temp[1]) { // data sie zgadza
  6. $nr = $temp[0];
  7. echo 'Dzisiejszy numerek to: ' . $nr;
  8. } else { // losowanie nowego numerka
  9. $nr = rand(1, 38);
  10. file_put_contents('liczba.txt', $nr . '|' . date('j'));
  11. }
  12.  
  13. ?>


Mógłby mi ktoś przerobić ten skrypt, żeby losował 3 liczby z 15?
Go to the top of the page
+Quote Post
mlawnik
post
Post #15





Grupa: Zarejestrowani
Postów: 455
Pomógł: 49
Dołączył: 12.04.2010

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


  1. <?php
  2.  
  3. $plik = file_get_contents('liczba.txt');
  4. $temp = explode('|', $plik);
  5. if (date('j') == $temp[1]) { // data sie zgadza
  6. //tu foreach dla 3 numerków
  7. $nr = $temp[0];
  8. echo 'Dzisiejsze numerki to: ' . $nr;
  9. } else { // losowanie nowego numerka
  10. //a ten kod dajesz we while i powtarzasz 3 razy
  11. $nr = rand(1, 38);
  12. file_put_contents('liczba.txt', $nr . '|' . date('j'));
  13. }
  14.  
  15. ?>


--------------------
Pozdrawiam,
mlawnik

Cytat(nospor)
Jedzmy gówno.... miliony much nie może się przecież mylić
Go to the top of the page
+Quote Post
Julcio
post
Post #16





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 23.01.2011

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


Cytat(mlawnik @ 12.08.2013, 23:56:53 ) *
  1. <?php
  2.  
  3. $plik = file_get_contents('liczba.txt');
  4. $temp = explode('|', $plik);
  5. if (date('j') == $temp[1]) { // data sie zgadza
  6. //tu foreach dla 3 numerków
  7. $nr = $temp[0];
  8. echo 'Dzisiejsze numerki to: ' . $nr;
  9. } else { // losowanie nowego numerka
  10. //a ten kod dajesz we while i powtarzasz 3 razy
  11. $nr = rand(1, 38);
  12. file_put_contents('liczba.txt', $nr . '|' . date('j'));
  13. }
  14.  
  15. ?>

Niestety liczyłem na tzw. gotowca, wiem, jestem leniem patentowanym, ale nigdy nie zagłębiałem się w PHP, ponieważ nie jest mi aż tak bardzo potrzebne, tylko od czasu do czasu potrzebuję mniejsze skrypty, licząc na gotowce, więc jeśli ktoś byłby chętny zmienić mi ten kod na "gotowo", to bardzo bym prosił.
Go to the top of the page
+Quote Post

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: 22.08.2025 - 06:43