Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Losowa wartosc z tablicy i pobieranie danych
wilkolaski
post
Post #1





Grupa: Zarejestrowani
Postów: 12
Pomógł: 0
Dołączył: 9.10.2006

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


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.
Go to the top of the page
+Quote Post
php programmer
post
Post #2





Grupa: Zarejestrowani
Postów: 1 045
Pomógł: 5
Dołączył: 8.11.2004
Skąd: trójmiasto

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


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. ?>


Ten post edytował php programmer 9.10.2006, 15:37:15
Go to the top of the page
+Quote Post
Sabistik
post
Post #3


Administrator wortalu


Grupa: Przyjaciele php.pl
Postów: 960
Pomógł: 39
Dołączył: 21.10.2003
Skąd: Kraków

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


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.
Go to the top of the page
+Quote Post
php programmer
post
Post #4





Grupa: Zarejestrowani
Postów: 1 045
Pomógł: 5
Dołączył: 8.11.2004
Skąd: trójmiasto

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


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


Ten post edytował php programmer 9.10.2006, 19:00:36
Go to the top of the page
+Quote Post
NetJaro
post
Post #5





Grupa: Zarejestrowani
Postów: 475
Pomógł: 0
Dołączył: 1.04.2005
Skąd: Warszawa

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


@php programmer ale Sabistik'owi chodziło raczej o to, żeby używaj funkcji stworzonych do danej czynności. Po co utrudniać sobie życie..?
Go to the top of the page
+Quote Post
siemakuba
post
Post #6





Grupa: Przyjaciele php.pl
Postów: 1 112
Pomógł: 20
Dołączył: 10.04.2005

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


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.
Go to the top of the page
+Quote Post
php programmer
post
Post #7





Grupa: Zarejestrowani
Postów: 1 045
Pomógł: 5
Dołączył: 8.11.2004
Skąd: trójmiasto

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


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. ?>


Ten post edytował php programmer 9.10.2006, 19:47:54
Go to the top of the page
+Quote Post
Luke_Star
post
Post #8





Grupa: Zarejestrowani
Postów: 129
Pomógł: 2
Dołączył: 17.01.2005

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


rozbroiles mnie php programmer (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif) masz podjeście (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

ja bym poprostu załatwił to samym rand() od 1 do count($tablica) i potem wybrał element do wyswietlenia
Go to the top of the page
+Quote Post
php programmer
post
Post #9





Grupa: Zarejestrowani
Postów: 1 045
Pomógł: 5
Dołączył: 8.11.2004
Skąd: trójmiasto

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


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 ?


Ten post edytował php programmer 9.10.2006, 21:39:57
Go to the top of the page
+Quote Post
Luke_Star
post
Post #10





Grupa: Zarejestrowani
Postów: 129
Pomógł: 2
Dołączył: 17.01.2005

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


yy faktycznie, przepraszam mój błąd teraz czaje dlaczego uzyłs date (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif)
Go to the top of the page
+Quote Post
wilkolaski
post
Post #11





Grupa: Zarejestrowani
Postów: 12
Pomógł: 0
Dołączył: 9.10.2006

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


Ufff wielkie dziekuje za ta budujaca sprzeczke (IMG:http://forum.php.pl/style_emoticons/default/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.
Go to the top of the page
+Quote Post
Sabistik
post
Post #12


Administrator wortalu


Grupa: Przyjaciele php.pl
Postów: 960
Pomógł: 39
Dołączył: 21.10.2003
Skąd: Kraków

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


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
Go to the top of the page
+Quote Post
php programmer
post
Post #13





Grupa: Zarejestrowani
Postów: 1 045
Pomógł: 5
Dołączył: 8.11.2004
Skąd: trójmiasto

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


@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

Ten post edytował php programmer 10.10.2006, 08:10:58
Go to the top of the page
+Quote Post
nospor
post
Post #14





Grupa: Moderatorzy
Postów: 36 559
Pomógł: 6315
Dołączył: 27.12.2004




@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?
Go to the top of the page
+Quote Post
php programmer
post
Post #15





Grupa: Zarejestrowani
Postów: 1 045
Pomógł: 5
Dołączył: 8.11.2004
Skąd: trójmiasto

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


@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.

Ten post edytował php programmer 10.10.2006, 08:31:25
Go to the top of the page
+Quote Post
nospor
post
Post #16





Grupa: Moderatorzy
Postów: 36 559
Pomógł: 6315
Dołączył: 27.12.2004




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.
Go to the top of the page
+Quote Post
php programmer
post
Post #17





Grupa: Zarejestrowani
Postów: 1 045
Pomógł: 5
Dołączył: 8.11.2004
Skąd: trójmiasto

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


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

Ten post edytował php programmer 10.10.2006, 08:47:42
Go to the top of the page
+Quote Post
nospor
post
Post #18





Grupa: Moderatorzy
Postów: 36 559
Pomógł: 6315
Dołączył: 27.12.2004




dobra, z tą pierwszą liczbą to sie troche zagolopowalem.
ale o "zadnej" to nie wspominalem, wiec wykladu na temat "zadnej" nie musiales robic (IMG:http://forum.php.pl/style_emoticons/default/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.
Go to the top of the page
+Quote Post
php programmer
post
Post #19





Grupa: Zarejestrowani
Postów: 1 045
Pomógł: 5
Dołączył: 8.11.2004
Skąd: trójmiasto

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


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.

Ten post edytował php programmer 10.10.2006, 08:55:56
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 21.10.2025 - 10:05