$imgnum = rand(1,29) Есть функция Как сделать чтобы число 6 Выпадало в три раза чаще остальных $koefficient = 3 Думаю добавить условие если. Если не 6, то снова рандом И так количество раз указанное в коэффициенте ? Ну а если нужна будет вероятность нескольких других чисел ? Как это можно сделать Кто подскажет Я вывожу картинки героев в шапке сайта И я бы хотел чтобы чаще других выпадали числа например 6,10,18
Получился следующий код <?php $values = [ ['value' => '1', 'weight' => 10], ['value' => '2', 'weight' => 20], ['value' => '3', 'weight' => 30], ['value' => '4', 'weight' => 30], ['value' => '5', 'weight' => 40], ['value' => '6', 'weight' => 50], ['value' => '7', 'weight' => 60], ['value' => '8', 'weight' => 70] ]; function randByWeight(array $arr) { $max = 0; $result = []; foreach($arr as $value) { $rand = pow((mt_rand() / (mt_getrandmax() + 1)), 1/$value['weight']); if ($rand > $max) { $max = $rand; $result = $value; } } return $result; } // Например: 'Three' выпадет в 50% случаев, тк его вес -- половина от суммы всех весов // Например: 'Two' выпадет в 30% случаев, тк его вес -- 30% от суммы всех весов var_dump(randByWeight($values)); ?> Выводит следующее: array(2) { ["value"]=> string(1) "8" ["weight"]=> int(70) } А как сделать чтобы выводил просто цифру?
Теперь нужно изменить скрипт, чтобы работал под php до 5.2.17 Иначе сайт не работает под более высокие версии! Ругается на вторую строку: $values = [ mod_fcgid: stderr: PHP Parse error: syntax error, unexpected '[' in /var/www/vhosts/st-312/vote.php on line 2 Пробовал менял [ на { Не помогло. Что там нужно изменить, чем не понравились эти скобки Можно как-то немного переделать, чтобы заработало под 5.2.17
Ввел array () Получил <?php $values = array( 'value' => '1', 'weight' => 10, 'value' => '2', 'weight' => 20, 'value' => '3', 'weight' => 30, 'value' => '4', 'weight' => 30, 'value' => '5', 'weight' => 40, 'value' => '6', 'weight' => 50, 'value' => '7', 'weight' => 60, 'value' => '8', 'weight' => 70 ); function randByWeight(array $arr) { $max = 0; $result = array(); foreach($arr as $value) { $rand = pow((mt_rand() / (mt_getrandmax() + 1)), 1/$value['weight']); if ($rand > $max) { $max = $rand; $result = $value; } } return $result; } $result=randByWeight($values); Echo $result['value']; ?> Но теперь выскакивает mod_fcgid: stderr: PHP Warning: Division by zero in /var/www/vhosts/st-312/vote.php on line 19 Это где-то здесь $result = array(); foreach($arr as $value) { $rand = pow((mt_rand() / (mt_getrandmax() + 1)), 1/$value['weight']); if ($rand > $max) { $max = $rand; $result = $value; } } Division by zero - как вообще победить ошибку.В какую сторону искать?
PHP: $values = array( array('value' => '1', 'weight' => 10), array('value' => '2', 'weight' => 20), array('value' => '3', 'weight' => 30), array('value' => '4', 'weight' => 30), array('value' => '5', 'weight' => 40), array('value' => '6', 'weight' => 50), array('value' => '7', 'weight' => 60), array('value' => '8', 'weight' => 70) );
С Согласен Но на сайте ОЧЕНЬ много модулей Плюс связка Dle+bulletin Плюс модули репутации, подарков, ачивок, разные связки с форумом, последнее на форуме, разные блоки. Там при небольшом то обновлении Dle - то ява скрипты не работают, то в админ панель не зайти Куча всего понамешано Повышу php до 5.5- перестанет Работать форум с модулями. Всё нужно сразу и одновременно переписывать. А денег проект не приносит
Смотрите чтобы во входных данных не был weight равный нулю. Но решение конечно... Ни в жизни из кода не понять почему эта формула дает искомый результат.