Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Pocent szans na wylosowanie liczby
Forum PHP.pl > Forum > PHP
MakS
Wlasnie trafilem na problem z ktorym mam bardzo duzy klopot, chodzi mi o to ze mam liczby np: 16,10,9 i do tego mam procentowo ustawione szansy na wylosowanie czyli np 16-30%, 10-30%, 9-40%
i niestety nie wiem jak to zrobic w php.

Wymyslilem jedna mozliwosc ze tworze tablice
[php:1:9d3e403f50]<?php
$tablica[1] = 16;
$tablica[2] = 16;
$tablica[3] = 16;
$tablica[4] = 10;
$tablica[5] = 10;
$tablica[6] = 9;
$tablica[7] = 9;
$tablica[8] = 9;
$tablica[9] = 9;
$tablica[10] = 10;

echo $tablica[rand(1,count($tablica))];
// losuje poprostu liczbe z tablicy
?>[/php:1:9d3e403f50]

niestety jest to raczej niezbyt dobre rozwiazanie bo jesli liczb bedzie wiecej to tablica bedzie ciagle rosla a wielkosc tego pliku oczywiscie pewnie bedzie miala znaczenie przy szybkosci generowania strony.

Mam nadzieje ze ktos ma jakies lepsze roziwazanie i podzieli sie nim ze mna smile.gif
Majdan
O to chodzi?
[php:1:e935bc5df2]<?php
$zm = rand(1,100);
if ($zm > 16 && $zm < 30) {
//skrypt
}
?>[/php:1:e935bc5df2]
Jest dokładnie 14%, że wylosuje ją z tego zakresu. :wink:
MakS
Wsumie tak, tak tez mozna zrobic, ale to jest dosc duzy problem jak sie ma nie 3 liczby tylko np 30 bo wtedy musisz policzyc sobie i wypisac 30 intrukcji warunkowych co jest troche uciazliwe, albo co gorsza jak trzeba wywlac ta funkcje losujaca pare razy w calym skrypcie z roznymi szansami procentowymi.

Ale dzieki za checi i pomoc smile.gif
rzseattle
Po perwsze zauwaz ze liczba nie moze miec zakresu prawdopodobienstwa wylosowania ( na jedna probe ma jedno prawdopodobienstwo i juz) po drugie suma prawdopodobienstw zawsze jest rowna 100% (1).

Tak wiec twoja tablica z liczbami zawsze bedzie miala 100 elementow jesli prawdopodobienstwo bedziez wyrazal z dokladnoscia do jednego procenta.

Podsumowywujac

[php:1:651209e6b7]<?php

$numbers = ( 16 => 30, 10 => 30, 9 => 40 );
if(array_sum($numbers) != 100){
exit('Nieprawidlowe prawdopodobienstwo.');
}
$arr = array();
foreach($numbers as $number => $procent){
$arr = array_merge($arr, array_fill( 0 , $procent, $number));
}

// tutaj mozesz jezcze ewentualnie dodac shuffle ale to nie powinno nic zmienic
echo $arr[rand(1,100)];
?>[/php:1:651209e6b7]

Pisane od reki wiec gdzies moze byc maly byk.
MakS
Ad popierwsze rozumiem, masz racje, ale przynajmniej dobrze mnie zrozumiales smile.gif bo walsnie o cos takiego mi chodzilo,a kodzie wkradl sie malutki blad
[php:1:b706453547]<?php
$numbers = array ( 16 => 30, 10 => 30, 9 => 40 );
?>[/php:1:b706453547]

Dzieki za pomoc
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.