Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Losowy element + waga elementu
windman
post
Post #1





Grupa: Zarejestrowani
Postów: 184
Pomógł: 13
Dołączył: 7.01.2008

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


Witam,

Zastaawiam się jak wyciągnąć losowy element tablicy biorąc pod uwagę wagę elementów.

$tablica[1][1]="Jan";
$tablica[1][2]="Karol";
$tablica[1][3]="Roman";
$tablica[3][1]="Andrzej";

Tablica dwuwymiarowa, pierwszy index wskazuje wagę elementu.
W tym przypadku powinienem otrzymywać na przemian element Andrzej i któryś z pozostałych - ponieważ element Andrzej ma wagę 3 a pozostałe 1.

Ma ktoś pomysł jak napisac skrypt do czegoś takiego?

Mogę oczywiście stworzyć tablicę wpisując do niej tyle razy dany element ile wynosi jego waga następnie normalnie losować jeden element tablicy, powinno działać prawidłowo, ale jakoś mało eleganckie rozwiązanie, nie uważacie?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 2)
Grzyw
post
Post #2





Grupa: Zarejestrowani
Postów: 561
Pomógł: 75
Dołączył: 19.08.2004
Skąd: Wrocław

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


Niezły problem:)
Nic nie przychodzi do głowy. Zrobiłbym to na pewno tak, jak sam zamierzasz to zrobić:

  1. <?php
  2. $tablica[1][1]="Jan";
  3. $tablica[1][2]="Karol";
  4. $tablica[1][3]="Roman";
  5. $tablica[3][1]="Andrzej";
  6.  
  7. foreach ($tablica as $waga => $wewnTab)
  8. {
  9. foreach ($wewnTab as $wartosc)
  10. { 
  11.  for ($i=0$i<$waga;$i++) $doLosowania[] = $wartosc
  12. }
  13. }
  14. $losowyIndex = rand(0,count($doLosowania));
  15. echo $doLosowania['losowyIndex'];
  16. ?>


Ten post edytował Grzyw 4.03.2008, 15:54:07


--------------------
Idąc po czyichś śladach, nie zajdziesz ani kroku dalej...
Go to the top of the page
+Quote Post
windman
post
Post #3





Grupa: Zarejestrowani
Postów: 184
Pomógł: 13
Dołączył: 7.01.2008

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


Cytat(Grzyw @ 4.03.2008, 15:53:55 ) *
Niezły problem:)
Nic nie przychodzi do głowy. Zrobiłbym to na pewno tak, jak sam zamierzasz to zrobić:


Muszę przyznać, że działa to bardzo dobrze. Nie wiem, czy jest sens szukać innego rozwiązania ale zawsze warto zapytać bardziej doświadczonych kolegów ;-)

Pozdrawiam
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: 19.08.2025 - 11:30