Rand – losowanie jednej z liczby

0

witam, w jaki sposób mogę uzyć randa zeby mi wylosować jedną z tych liczb:

liczby_lista = "5,123,66,34,879,43,567";
0

Wstawiasz liczby w tablicę i losujesz indeks, lol. Albo: http://php.net/manual/en/function.array-rand.php

0

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)];

    ?>
0
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 :)

0
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];

0

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.

0
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

0

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 100
  • b - 30 szans na 100
  • c - 40 szans na 100
  • d - 10 szans na 100

Zauważ, ż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.

0
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 100
  • b - 30 szans na 100
  • c - 40 szans na 100
  • d - 10 szans na 100

Zauważ, ż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.

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?

0

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.

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0