witam, w jaki sposób mogę uzyć randa zeby mi wylosować jedną z tych liczb:
liczby_lista = "5,123,66,34,879,43,567";
Wstawiasz liczby w tablicę i losujesz indeks, lol. Albo: http://php.net/manual/en/function.array-rand.php
Czyli:
<?php
$tablica = [5,123,66,34,879,43,567];
echo $tablica[rand(0, count($tablica)-1)];
?>
albo prościej:
<?php
$tablica = [5,123,66,34,879,43,567];
echo $tablica[array_rand($tablica)];
?>
kmph napisał(a):
Czyli:
<?php $tablica = [5,123,66,34,879,43,567]; echo $tablica[rand(0, count($tablica)-1)]; ?>
albo prościej:
<?php $tablica = [5,123,66,34,879,43,567]; echo $tablica[array_rand($tablica)]; ?>
wielkie dzięki :)
kmph napisał(a):
Czyli:
<?php $tablica = [5,123,66,34,879,43,567]; echo $tablica[rand(0, count($tablica)-1)]; ?>
albo prościej:
<?php $tablica = [5,123,66,34,879,43,567]; echo $tablica[array_rand($tablica)]; ?>
jeszcze jedno mam pytanko jak do tego dodać np zeby kazda liczba miała swoją szanse? np $tablica = [5;500,123;1000,66;700,34;400,879;5,43;45,567;657];
Losujesz liczbę całkowitą z zakresu [0; suma szans). Jeśli wylosujesz liczbę z zakresu [0; szansa na liczbę o indeksie 0) to bierzesz z tablicy liczbę o indeksie 0. Jeśli wylosujsz libczę z zakresu [szansza na licbzę o indeksie 0; szansza na liczbę o indeksie 0+szansza na liczbę o indeksie 1) to bierzesz liczbę o indeksie 1.
Zastanów się, nie będę pisał za ciebie całego kodu, a wpadnięcie na prawidłowe rozwiązanie naprawdę nie jest trudne.
kmph napisał(a):
Losujesz liczbę całkowitą z zakresu [0; suma szans). Jeśli wylosujesz liczbę z zakresu [0; szansa na liczbę o indeksie 0) to bierzesz z tablicy liczbę o indeksie 0. Jeśli wylosujsz libczę z zakresu [szansza na licbzę o indeksie 0; szansza na liczbę o indeksie 0+szansza na liczbę o indeksie 1) to bierzesz liczbę o indeksie 1.
Zastanów się, nie będę pisał za ciebie całego kodu, a wpadnięcie na prawidłowe rozwiązanie naprawdę nie jest trudne.
chciałem coś takiego zrobić ze np:
f = 10000 szans z (100000)
d = 6000 szans z (100000)
a = 5000 szans z (100000)
b = 4000 szans z (100000)
c = 3000 szans z (100000)
i zeby zaczynalo losowac od najmniejszej szansy do najwiekszej jezeli jakas litera zostanie wylosowana wtedy sie zatrzymuje
to co napisałeś wcale nie zrozumiałem przykro mi ale naprawdę nic z tego nie rozumiem
Przecież wiem, o co ci chodziło.
rand(1, 99)
- losuje ci dowolną liczbę z zakresu od 1 do 100 włącznie.
Weź zeszyt w kratkę. Narysuj przedział na 10 kratek. 1 kratka = 10 szans. Razem masz więc 10 kratek po 10 szans, co daje 100 szans.
Teraz na tym przedziale o długości 10 kratek zaznacz podprzedział o długości 2 kratek, od kratki pierwszej do drugiej. Co daje razem 20 szans. Przyporządkuj do tego podprzedziału np. literkę a
. Jeśli wylosowana liczba wpadnie do tego podprzedziału, to znaczy, że wylosowałeś literkę a
.
Zaraz za tym podprzedziałem umieść kolejny podprzedział, tym razem o długości 3 kratek. Co daje razem 30 szans. Ustal, że jeśli wylosowana liczba wpadnie do tego podprzedziału, to znaczy, że wylosowałeś np. literkę b
.
Zaraz za nim umieśćkolejny podprzedział, tym razem o długości 4 kratek. Co daje razem 40 szans. Ustal, że jeśli wylosowana liczba wpadnie do tego podprzedziału, to znaczy, że wylosowałeś literkę c
.
Ostatnia kratka stanowi podprzedział o długości 1 kratki, czyli 10 szans. To jest popdrzedział przyporządkowany literce d
.
Tak więc ostatecznie losujemy jedną spośród 4 literek: a
, b
, c
, d
, przy czym:
a
- 20 szans na 100b
- 30 szans na 100c
- 40 szans na 100d
- 10 szans na 100Zauważ, że oznacza to, że jeśli wylosowałeś liczbę z zakresu [1, 20], (np. liczbę 16), to oznacza to, że wylosowałeś literkę a
(bo ta liczba należy do przedziału przyporządkowanego literce a
, zaś jeśli wylosowałeś liczbę z zakresu [51, 90], (np. liczbę 51), to oznacza to, że wylosowałeś literkę c
(bo liczba 51
należy do przedziału przyporządkowanego literce c
.
Więcej naprawdę nic nie powiem, chyba że zaprezentujesz własną próbę rozwiązania tego zadania.
kmph napisał(a):
Przecież wiem, o co ci chodziło.
rand(1, 99)
- losuje ci dowolną liczbę z zakresu od 1 do 100 włącznie.Weź zeszyt w kratkę. Narysuj przedział na 10 kratek. 1 kratka = 10 szans. Razem masz więc 10 kratek po 10 szans, co daje 100 szans.
Teraz na tym przedziale o długości 10 kratek zaznacz podprzedział o długości 2 kratek, od kratki pierwszej do drugiej. Co daje razem 20 szans. Przyporządkuj do tego podprzedziału np. literkę
a
. Jeśli wylosowana liczba wpadnie do tego podprzedziału, to znaczy, że wylosowałeś literkęa
.Zaraz za tym podprzedziałem umieść kolejny podprzedział, tym razem o długości 3 kratek. Co daje razem 30 szans. Ustal, że jeśli wylosowana liczba wpadnie do tego podprzedziału, to znaczy, że wylosowałeś np. literkę
b
.Zaraz za nim umieśćkolejny podprzedział, tym razem o długości 4 kratek. Co daje razem 40 szans. Ustal, że jeśli wylosowana liczba wpadnie do tego podprzedziału, to znaczy, że wylosowałeś literkę
c
.Ostatnia kratka stanowi podprzedział o długości 1 kratki, czyli 10 szans. To jest popdrzedział przyporządkowany literce
d
.Tak więc ostatecznie losujemy jedną spośród 4 literek:
a
,b
,c
,d
, przy czym:
a
- 20 szans na 100b
- 30 szans na 100c
- 40 szans na 100d
- 10 szans na 100Zauważ, że oznacza to, że jeśli wylosowałeś liczbę z zakresu [1, 20], (np. liczbę 16), to oznacza to, że wylosowałeś literkę
a
(bo ta liczba należy do przedziału przyporządkowanego litercea
, zaś jeśli wylosowałeś liczbę z zakresu [51, 90], (np. liczbę 51), to oznacza to, że wylosowałeś literkęc
(bo liczba51
należy do przedziału przyporządkowanego litercec
.Więcej naprawdę nic nie powiem, chyba że zaprezentujesz własną próbę rozwiązania tego zadania.
niby mozna przypozadkować liczbę pod randa
ale jezeli sa np
np
losowanie = rand(1,100)
if(losowanie == 100){
rand(c, d);
echo c = 100
echo d = 100
}
inaczej nie wiem jak to zrobic za pomocą tablicy
to wtedy wylosuję obydwie
no chyba ze jezeli wylosuje z tą samą szansą c,d to jeszcze raz losować miedzy nimi o to chodzi?
Po co Ci dwa randy?? Tak jak napisałem, wystarczy 1 losowanie. JEDNO. Jedno wywołanie funkcji rand. Tyle wystarczy. Jeśli wywołujesz funkcję rand dwa lub więcej razy, a niektóre do tego jeszcze zagnieżdżasz w ifach, to robisz to źle.
Przeczytaj jeszcze raz, co pisałem.
kmph napisał(a):
Po co Ci dwa randy?? Tak jak napisałem, wystarczy 1 losowanie. JEDNO. Jedno wywołanie funkcji rand. Tyle wystarczy. Jeśli wywołujesz funkcję rand dwa lub więcej razy, a niektóre do tego jeszcze zagnieżdżasz w ifach, to robisz to źle.
Przeczytaj jeszcze raz, co pisałem.
No ok ale dajmy na to przyklad ze chce jedna literke zamiast dwoch a obydwie beda miec to 100% wtedy rand mi wylosuje obydwie, moze dalej cos zle rozumiem musze pomyslec.
Ale bez ifa raczej to jest nie wykonywalne i ponownego losowania
a obydwie beda miec to 100%
Obydwie nie mogą mieć 100%, bo jeśli przy losowaniu jednej literki z iluśtam przypisujesz każdej literce wagi, to wszystkie te wagi muszą sumować się do 100%. A jeśli obydwie literki mają wagi po 100% to wówczas suma wag wynosi 200%, co jest absurdem.
Waga 100% oznacza pewność wylosowania. Więc jeśli losujesz 1 literkę z dwóch to nie możesz ustalić, że każda zostanie wylosowana na pewno!!
Zamiast tego możesz np. przypisać każdej z dwóch literek wagę 50%. Wówczas będziesz miał połowę szans, że wylosuje ci się jedna literka, i połowę szans, że wylosuje ci się druga. Albo możesz jednej literce dać wagę 20%, a drugiej 80%. Wtedy druga będzie wypadać 4 razy częściej, niż pierwsza.
Byleby wagi sumowały się do 100%.
EDIT: I dlatego też to jest źle:
chciałem coś takiego zrobić ze np:
f = 10000 szans z (100000)
d = 6000 szans z (100000)
a = 5000 szans z (100000)
b = 4000 szans z (100000)
c = 3000 szans z (100000)
Jeśli dajesz każdej literce ileś szans z 100000 to szanse muszą sumować się do 100000. Tymczasem tutaj szanse sumują ci się do 10000+6000+5000+4000+3000=28000. To oznacza, że pozostaje ci 100000-28000=72000 szans na to, że nie wylosuje ci się żadna literka.