Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Losowa wartosc z tablicy i pobieranie danych
Forum PHP.pl > Forum > Przedszkole
wilkolaski
Witam.
Przepraszam ze nie wczytuje sie w forum tzn nie szukalem odpowiedzi na moje pytanie ale mam bardzo malo czasu i potrzebuje szybkiej odpowiedzi.
Przerabiam skrypt ktory ma taka linijke kodu gdzies w srodku skryptu
Kod
<script type="text/javascript" src="http://paulus.org.pl/ministrant"></script>;

I teraz co zrobic zeby dane zawarte w odnosniku przypisac do zmiennej ktora pozniej wysle do Flaszka.

Mam jeszcze drugie pytanie.
Mam tablice z stringami chcialbym zeby losowo wybrany string pojawial sie przez caly dzien tzn niezaleznie od tego ile razy w ciagu dnia wejde na strone. Jak to mozna zrobic ?

Pozdrawiam i juz teraz dziekuje za pomoc.
php programmer
Cytat
Mam tablice z stringami chcialbym zeby losowo wybrany string pojawial sie przez caly dzien tzn niezaleznie od tego ile razy w ciagu dnia wejde na strone. Jak to mozna zrobic ?


z palca:
  1. <?php
  2. $tablica = Array();
  3. $tablica[] = 'pierwszy napis';
  4. $tablica[] = 'drugi napis';
  5. $tablica[] = 'trzeci napis';
  6. $tablica[] = 'czwarty napis';
  7. $los = Date("Ymd")*17 % count($tablica);
  8. $napis = $tablica[$los];
  9. echo $napis;
  10. ?>
Sabistik
php programmer losowosc jak stara haliny...

Mozesz np: Podczas pierwszej wizyty zapisywac do pliku date oraz index wylosowanego tekstu(array_rand()" title="Zobacz w manualu php" target="_manual). Dla kolejnych gosci sprawdzaj czy minelo 24h od ostatniego losowania, jesli tak powtarzasz powyzsza operacje, jesli nie wyswietlasz element tablicy z indeksem z pliku.
php programmer
Cytat
php programmer losowosc jak stara haliny...


Nie wiem gdzie tu widzisz brak losowwości,
zrób sobie test przykładwo dla kolejnych
1000 następujących po sobie dni,
jeśli rozkład będzie równomierny to znaczy,
że losowość jest jak najbardziej prawdziwa

Zresztą puściły mi nerwy i napisałem test:
  1. <?php
  2. $time = time();
  3. $size_tablicy = 12; // przykładowy size tablicy
  4.  
  5.  
  6. $tablica_frekwencji = Array(); // tablica do sprawdzenia czy rzeczywiście jest losowoć
  7. $liczba_pierwsza = 23;
  8.  
  9. for($i=0;$i<=999;$i++){
  10. $los = Date("Ymd",$time+$i*3600*24)*$liczba_pierwsza % $size_tablicy;
  11. $tablica_frekwencji[$los]++;
  12. }
  13. print_r($tablica_frekwencji);
  14. ?>


przykladowy wynik
Cytat
[11] => 87
[10] => 87
[9] => 84
[8] => 77
[7] => 87
[6] => 86
[5] => 82
[4] => 76
[3] => 87
[2] => 87
[1] => 83
[0] => 77


Dla porównania losowość z przy użyciu funkcji rand

  1. <?php
  2. $size_tablicy = 12; // przykładowy size tablicy
  3.  
  4. $tablica_frekwencji = Array(); // tablica do sprawdzenia czy rzeczywiście jest losowoć
  5.  
  6. for($i=0;$i<=999;$i++){
  7. $los = rand(0,$size_tablicy-1);
  8. $tablica_frekwencji[$los]++;
  9. }
  10. print_r($tablica_frekwencji);
  11. ?>


Z przykładowym wynikiem:
Cytat
[11] => 78
[10] => 85
[9] => 100
[8] => 77
[7] => 69
[6] => 72
[5] => 80
[4] => 77
[3] => 94
[2] => 84
[1] => 100
[0] => 84
NetJaro
@php programmer ale Sabistik'owi chodziło raczej o to, żeby używaj funkcji stworzonych do danej czynności. Po co utrudniać sobie życie..?
siemakuba
Cytat(NetJaro @ 9.10.2006, 20:13:21 ) *
chodziło raczej o to, żeby używaj funkcji stworzonych do danej czynności.
Nie wydaje mi się. Nie wgłębiam się, ale rozwiązanie, które pokazał @php programmer ma taką zaletę, że będzie losowe w skali dnia - każde losowanie danego dnai da taką samą liczbę, czyli wedle potrzeby autora. Losując za pomocą rand musisz, jak napisał @Sabistik przechować jeszcze wylosowaną wartośc i używać jej przez dany dzień a następnego dnia losować nową.

pozdr.
php programmer
Cytat
Po co utrudniać sobie życie..?

No właśnie, po co utrudniać sobie życie
i za każdym sprawdzać czy mineło 24 godziny
i jeszcze trzeba otwierać plik i zapisywać do niego,
zamiast tych wszystkich czynności,
moje rozwiązanie sprowadza się do tej jednej linijki

  1. <?php
  2. $los = Date("Ymd")*17 % count($tablica);
  3. ?>
Luke_Star
rozbroiles mnie php programmer biggrin.gif masz podjeście smile.gif

ja bym poprostu załatwił to samym rand() od 1 do count($tablica) i potem wybrał element do wyswietlenia
php programmer
W takim razie chyba nie przeczytałeś dokładnie pierwszego postu

Cytat
Mam tablice z stringami chcialbym zeby losowo wybrany string pojawial sie przez caly dzien tzn niezaleznie od tego ile razy w ciagu dnia wejde na strone. Jak to mozna zrobic ?
Luke_Star
yy faktycznie, przepraszam mój błąd teraz czaje dlaczego uzyłs date biggrin.gif
wilkolaski
Ufff wielkie dziekuje za ta budujaca sprzeczke smile.gif
Postaram sie jakos to przeniesc do skryptu a co poradzilibyscie odnosnie mojego pierwszego pytania tzn zwiazanego z odczytaniem danych z zalacznika i wyslaniu ich do Flaszka.
Sabistik
Ale co ty mi tu w ogole losujesz... Co przedstawiasz tymi wynikami przykladow bo ja nie wiem... masz wylosowac klucze tablicy 12 elementowej (0-11)

Ponizej masz prawidlowo wykorzystane twoje losowanie oraz rand()
http://sabistic.info/test/test.php
php programmer
@sabastic widze, że nie czaisz o co chodzi z tą tablicą frekwencji.
Ma ona dokładnie tyle elementów, ile tablica stringów (u mnie 12),
jeśli wylosujesz jakiś index (losujesz liczbe od 0 do 11),
to na pozycji tego wylosowanego indexu jest zwiększana
wartość o jeden (ta początku wszystkie są wyzerowane),
w ten sposób dowiadujesz się ile razy wylosowano daną pozycję,
jeśli wyniki są dość wyrownane to znaczy że losowanie jest wiarygodne
(jeśli dobrze pamiętam to u mnie wachało się to koło liczby 80) ,
im bardziej wyniki były by rozbierzne, tym mniejsza
jest wiarygodnośc losowania
nospor
@php programmer Sabistik ci mowi, ze w kodzie co pokazales:
  1. <?php
  2. $los = Date('Ymd')*17 % count($tablica);
  3. ?>

Nie ma zadnej losowosci. I ma racje. Bo jaka tu losowosc dla danego dnia? żadna. Zawsze dla tego danego dnia będzie ta sama liczba. To mozna latwo wyliczyc i zadnej tu losowosci nie ma.
Co innego, ze ten kod dla danego dnia zawsze zwroci tą samą liczbę. I chwala ci za to. Ale Sabistikowi chodzi oto, ze nie ma tu zadnej losowosci.
pomnoz 2005 przez 4 potem podziel modulo 4. Gdzie tu losowosc?
php programmer
@nospor ty już filozofujesz,
Cytat
pomnoz 2005 przez 4 potem podziel modulo 4. Gdzie tu losowosc?

A jak zdefinujesz losowość?
Zresztą nie mnożę 2005 przez 4, tylko
20060912 przez jakąś liczbę pierszą, a potem dzielę przez ilośc elementów tablicy,
zresztą większość algorytmow generujących liczby losowe działa na podobnej
zasadzie,
http://pl.wikipedia.org/wiki/Generator_liczb_losowych
a nawet jeśli nie, to myślę, że w praktycznym znaczeniu
autorowi postu chodziło dokładnie o to co napisałem.
Losowość jest jak najbardziej.
nospor
Cytat
Zresztą nie mnożę 2005 przez 4, tylko
Ja wiem ze nie 2005, to byl tylko przyklad. co za roznica czy 2005 czy 20060912?Zadna. liczba to liczba.
Co za rozcnica czy liczba pierwsza czy nie? W tym przypadki rowniez zadna. Rownie dobrze moze to byc 18. Ty myslisz ze jak do algorytmu wlozysz liczbe pierwszą to juz to jest cud algorytm? Zebys ty tę liczbę pierwszą jakas warunkowal, ale nie, tu zawsze masz te same liczby w dzialaniu dla danego dnia, wiec dla danego dnia tu nie ma zadnej losowosci. Co najwyzej bylalby "losowosc" gdy liczba elementow tablicy w ciagu dnia sie zmieniala, ale wowczas bys dostawal rozne liczby w ciagu dnia i po ptokach juz by bylo.
php programmer
Cytat
Co za rozcnica czy liczba pierwsza czy nie?

Bardzo duża, załóżmy najpierw, że nie mnożysz przez żadną liczbę,
wyjdzie wtedy, że liczby losowe będą kolejne, np
12, 13, 14 id co jest już nie ładne,
jeśli natomiast weźmiesz jakąś liczbę nie pierwszą,
a przypadkiem liczba ta będzie wielokrotnośćią ilości
elementów tablicy to już mamy niepotrzebne mnożenie,
(wtedy było by coś w rodzajutego co napisałeś, że mnożysz przez 4 i dzielisz przez 4)
bo wynik może okazać się taki sam zarówno dla liczby 4 jak i 8,

edit: przepraszam nie ten link był:
http://www.i-lo.tarnow.pl/edu/inf/alg/primes/pages/015.php
nospor
dobra, z tą pierwszą liczbą to sie troche zagolopowalem.
ale o "zadnej" to nie wspominalem, wiec wykladu na temat "zadnej" nie musiales robic winksmiley.jpg

Co nie zmienia faktu, ze dla danego dnia to zadna losowosc. Do tego caly czas dążymy.
Ale to, ze to nie losowosc dla danego dnia, to nie zmienia faktu, ze Twoj kod, robi mniej więcej to co autor chcial - pod warunkiem ze w ciągu dnia nie bedzie zmienial liczby elementow.

koniec OT z mojej strony.
php programmer
Cytat
ale o "zadnej" to nie wspominalem, wiec wykladu na temat "zadnej" nie musiales robic

wiem, wiem, ale powiedziałem o tym, żeby łatwiej było dojść do sedna sprawy,
jak się pokaże najpierw absurdalny przypadek, to potem łatwiej zobaczyć bardziej złożony,
ja też już kończe, bo straciłem godzine czasu na śledzenie wątku, a jestem na okresie próbnym.
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.