Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Skrypt- losowe pobieranie treści, Jak zrobić żeby nie bylo powtorzen?
macio99
post
Post #1





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 29.06.2007

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


Witam,

Mam oto taki skrypt:

  1. <? 
  2. $tresc[] = "jakas tresc a";
  3. $tresc[] = "jakas tresc b";
  4. $tresc[] = "jakas tresc c";
  5. $tresc[] = "jakas tresc d";
  6. $tresc[] = "jakas tresc e";
  7.  
  8. srand ((double) microtime() * 800);
  9. $randomtresc = rand(0,count($tresc)-1);
  10. $randomtresca = rand(0,count($tresc)-1);
  11. $randomtrescb = rand(0,count($tresc)-1);
  12.  
  13. echo "" . $tresc[$randomtresc] . "";
  14. echo " " . $tresc[$randomtresca] . "";
  15. echo " " . $tresc[$randomtrescb] . "";
  16.  
  17. ?>


i teraz moje pytanie: co nalezy dopisac i gdzie, zeby nie bylo takiej sytuacji, ze zostanie wylosowana za jednym razem ta sama tresc?
I dodatkowe pytanie: czy da sie w jakis prosty sposob przypisac "wage" do zmiennych losowanych? Tzn. chcialbym aby byla waga (np. od 1 do 5) i jak przy "tresci a" bedzie waga 5 a przy "tresci b" waga 1 to "tresc a" bedzie pobierana 5 razy czesciej?
Czy moglby ktos zmodyfikowac odpowiednio powyzszy skrypcik? Z gory bardzo dziekuje za pomoc.
Go to the top of the page
+Quote Post
nexis
post
Post #2





Grupa: Zarejestrowani
Postów: 1 012
Pomógł: 109
Dołączył: 26.09.2003
Skąd: nexis.pl

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


Tak można rozwiązać problem wag:

  1. <?php
  2.  
  3. $waga = "111112345";
  4. $tresc = array(1 => 'jakas tresc a', 2 => 'jakas tresc b', 3 => 'jakas tresc c', 4 => 'jakas tresc d', 5 => 'jakas tresc e');
  5.  
  6. for ($i = 0; $i < 3; $i++) echo $tresc[$waga{rand(0,strlen($waga)-1)}] . '<br />';
  7.  
  8. ?>
Go to the top of the page
+Quote Post
abc667
post
Post #3





Grupa: Zarejestrowani
Postów: 229
Pomógł: 0
Dołączył: 29.05.2007

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


a co do niepowtarzalności to użyj array_rand()
  1. <?php
  2. $keys = array_rand($tresc, 3);
  3.  
  4. for($i=0,$count=count($keys);$i<$count;$i++)
  5. {
  6. echo $tresc[$keys[$i]];
  7. }
  8. ?>
Go to the top of the page
+Quote Post
macio99
post
Post #4





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 29.06.2007

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


Dziękuję bardzo Wam za błyskawiczną pomoc! Jak zapewne się zorientowaliście to moje początki z php, w związku z tym mam jeszcze jedną (ostanią (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) ) prośbę: czy mógłby ktoś połączyć obie powyższe rzeczy w jedną całość? Tak żeby w jednym skrypcie były i wagi i brak powtarzalności?
Będę bardzo, bardzo wdzięczny.

I jeszcze malutkie pytantko dotyczace skryptu z "wagami". Czy to oznacza, ze "jakas tresc a" ma przydzielona wage 1 a "jakas tresc d" ma wage 4? Chcialbym dobrze zrozumiec o co tam chodzi:)

Ten post edytował macio99 30.06.2007, 14:48:05
Go to the top of the page
+Quote Post
em1X
post
Post #5





Grupa: Zarejestrowani
Postów: 984
Pomógł: 41
Dołączył: 16.03.2002
Skąd: Płock

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


Koledzy kiedy zaczniecie uzywac mt_rand" title="Zobacz w manualu PHP" target="_manual.. nie dosc, ze jest szybszy, to nie trzeba uzywac sranda.

Ten post edytował em1X 1.07.2007, 20:00:55
Go to the top of the page
+Quote Post
macio99
post
Post #6





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 29.06.2007

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


Bardzo proszę żeby ktoś mi wytłumaczył o co chodzi z przydzielaniem wag w pierwszym skrypcie. W jaki sposób je wpisywać i co to oznacza? Np. chcę "treści a" przydzielić wagę 4 a "treści e" wagę 2 (czyli "treść a" ma się pojawić 4 razy na 6 pobrań a "treść e" 2 razy na te 6 podbrań). Jak to wpisać?

I proszę o połączenie obu skryptów w jedną całość (żeby powstał jeden skrypt zarówno z wagami losowanej treści, jak i brakiem powtórzeń).
Sam nie potrafię sobie z tym poradzić mimo, że siedzę nad tym i ciągle kombinuję:( Z góry bardzo dziękuję.

Ten post edytował macio99 1.07.2007, 20:09:55
Go to the top of the page
+Quote Post
abc667
post
Post #7





Grupa: Zarejestrowani
Postów: 229
Pomógł: 0
Dołączył: 29.05.2007

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


Cytat(em1X @ 1.07.2007, 21:00:40 ) *
Koledzy kiedy zaczniecie uzywac mt_rand" title="Zobacz w manualu PHP" target="_manual.. nie dosc, ze jest szybszy, to nie trzeba uzywac sranda.

a to jest trzeba używać? (IMG:http://forum.php.pl/style_emoticons/default/blinksmiley.gif) ciekawe


macio99
$waga = '111112345';
oznacza że 1 ma wagę 5 a reszta po 1

  1. <?php
  2. $waga = '111112345';
  3. $tresc = array(1 => 'jakas tresc a', 2 => 'jakas tresc b', 3 => 'jakas tresc c', 4 => 'jakas tresc d', 5 => 'jakas tresc e');
  4.  
  5. $i=0;
  6. $arr = array();
  7. while($i<4)
  8. {
  9. $tmp = $tresc[$waga{rand(0,strlen($waga)-1)}];
  10.  if(!in_array($tmp, $arr))
  11. {
  12. $arr[] = $tmp;
  13. $i++;
  14. }
  15. }
  16.  
  17. print_r($arr);
  18. ?>
Go to the top of the page
+Quote Post
Strzałek
post
Post #8





Grupa: Przyjaciele php.pl
Postów: 384
Pomógł: 6
Dołączył: 11.09.2004
Skąd: Grodzisk Mazowiecki

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


Cytat(em1X @ 1.07.2007, 21:00:40 ) *
Koledzy kiedy zaczniecie uzywac mt_rand" title="Zobacz w manualu PHP" target="_manual.. nie dosc, ze jest szybszy, to nie trzeba uzywac sranda.



Śpieszę z wytłumaczeniem gdyż kolega jest w błędzie. Manual mówi o srand" title="Zobacz w manualu PHP" target="_manual to:

Cytat
Note: As of PHP 4.2.0, there is no need to seed the random number generator with srand() or mt_srand() as this is now done automatically.
Go to the top of the page
+Quote Post
em1X
post
Post #9





Grupa: Zarejestrowani
Postów: 984
Pomógł: 41
Dołączył: 16.03.2002
Skąd: Płock

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


akurat to jest mniej wazne

Cytat
Funkcja mt_rand() jest jej zamiennikiem. Używa ona generatora liczb losowych (...) który generuje liczby losowe czterokrotnie szybciej niż średnio funkcja rand()
Go to the top of the page
+Quote Post
macio99
post
Post #10





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 29.06.2007

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


abc667 - wielkie dzieki. Ale jest pewnien problem. Po uruchomieniu skryptu pojawia sie przykladowy zestaw:

Array ( [0] => jakas tresc d [1] => jakas tresc c [2] => jakas tresc a [3] => jakas tresc b )

a mi chodzi o to zeby pojawiala sie tylko losowo wybierana tresc, czyli na przyklad:

jakas tresc a jakas tresc b jakas tresc e jakas tresc d jakas tresc a

bez "Array", nawiasów, liczb, itd. (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Co trzeba zmienic zeby tak bylo?
Go to the top of the page
+Quote Post
flv
post
Post #11





Grupa: Zarejestrowani
Postów: 130
Pomógł: 1
Dołączył: 29.06.2007

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


  1. <?php
  2. $waga = '111112345';
  3. $tresc = array(1 => 'jakas tresc a', 2 => 'jakas tresc b', 3 => 'jakas tresc c', 4 => 'jakas tresc d', 5 => 'jakas tresc e');
  4.  
  5. $i=0;
  6. $arr = array();
  7. while($i<4)
  8. {
  9. $tmp = $tresc[$waga{rand(0,strlen($waga)-1)}];
  10.  if(!in_array($tmp, $arr))
  11. {
  12. $arr[] = $tmp;
  13. $i++;
  14. }
  15. }
  16.  
  17. foreach($arr as $value)
  18. {
  19. echo $value.'<br>';
  20. }
  21. ?>


Ten post edytował flv 2.07.2007, 17:48:55
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: 24.08.2025 - 21:57