Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Skrypt- losowe pobieranie treści
Forum PHP.pl > Forum > PHP
macio99
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.
nexis
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. ?>
abc667
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. ?>
macio99
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ą 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:)
em1X
Koledzy kiedy zaczniecie uzywac mt_rand" title="Zobacz w manualu PHP" target="_manual.. nie dosc, ze jest szybszy, to nie trzeba uzywac sranda.
macio99
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ę.
abc667
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ć? 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. ?>
Strzałek
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.
em1X
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()
macio99
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. smile.gif

Co trzeba zmienic zeby tak bylo?
flv
  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. ?>
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.