<?php
/**
* @param array $items
* @param array $weights
*
* @return mixed
*/
function random_weighted(array $items, array $weights) {
$weight = 0;
$return = current($items);
for ($i = 0, $n = count($items); $i < $n; ++$i) {
$random = mt_rand(0, $weights[$i] + $weight);
if ($random >= $weight) {
$return = $items[$i];
}
$weight += $weights[$i];
}
return $return;
}
$items = ['a', 'b', 'c'];
$weights = [0, 3, 3];
$i = 100;
$results = ['a' => 0, 'b' => 0, 'c' => 0];
do {
$x = random_weighted($items, $weights);
$results[$x]++;
} while (--$i);
var_dump($results);
- Output for 7.1.6, 7.1.28, 7.2.5, 7.2.21, 7.3.9, 7.4.0
- array(3) {
["a"]=>
int(0)
["b"]=>
int(40)
["c"]=>
int(60)
}
- Output for 5.6.11, 7.2.0, 7.3.1, 7.3.4, 7.3.12
- array(3) {
["a"]=>
int(0)
["b"]=>
int(36)
["c"]=>
int(64)
}
- Output for 5.6.15, 7.0.1, 7.1.33, 7.2.4, 7.3.11
- array(3) {
["a"]=>
int(0)
["b"]=>
int(38)
["c"]=>
int(62)
}
- Output for 5.6.20, 7.0.2, 7.2.18, 7.2.24, 7.3.10
- array(3) {
["a"]=>
int(0)
["b"]=>
int(44)
["c"]=>
int(56)
}
- Output for 7.1.25, 7.2.2, 7.2.11, 7.3.8
- array(3) {
["a"]=>
int(0)
["b"]=>
int(42)
["c"]=>
int(58)
}
- Output for 5.5.30, 5.6.14, 5.6.28, 7.0.0, 7.0.4, 7.2.13, 7.3.5, 7.3.7
- array(3) {
["a"]=>
int(0)
["b"]=>
int(45)
["c"]=>
int(55)
}
- Output for 5.5.29, 5.5.31 - 5.5.32, 5.6.17, 7.0.6, 7.2.25, 7.3.6
- array(3) {
["a"]=>
int(0)
["b"]=>
int(51)
["c"]=>
int(49)
}
- Output for 5.5.26, 5.6.10, 7.0.3, 7.1.29, 7.3.3
- array(3) {
["a"]=>
int(0)
["b"]=>
int(49)
["c"]=>
int(51)
}
- Output for 7.1.27, 7.3.2
- array(3) {
["a"]=>
int(0)
["b"]=>
int(47)
["c"]=>
int(53)
}
- Output for 5.5.24, 5.5.27, 5.5.35, 5.6.13, 7.2.7, 7.2.10, 7.2.22 - 7.2.23, 7.3.0
- array(3) {
["a"]=>
int(0)
["b"]=>
int(41)
["c"]=>
int(59)
}
- Output for 7.2.20
- array(3) {
["a"]=>
int(0)
["b"]=>
int(30)
["c"]=>
int(70)
}
- Output for 5.6.8, 7.2.8, 7.2.12, 7.2.19
- array(3) {
["a"]=>
int(0)
["b"]=>
int(48)
["c"]=>
int(52)
}
- Output for 5.6.16, 5.6.21, 7.1.0, 7.2.17
- array(3) {
["a"]=>
int(0)
["b"]=>
int(39)
["c"]=>
int(61)
}
- Output for 5.6.9, 5.6.12, 5.6.19, 7.0.20, 7.2.9
- array(3) {
["a"]=>
int(0)
["b"]=>
int(37)
["c"]=>
int(63)
}
- Output for 7.1.5, 7.1.7, 7.1.31, 7.2.1, 7.2.6
- array(3) {
["a"]=>
int(0)
["b"]=>
int(43)
["c"]=>
int(57)
}
- Output for 7.2.3
- array(3) {
["a"]=>
int(0)
["b"]=>
int(33)
["c"]=>
int(67)
}
- Output for 7.1.32
- array(3) {
["a"]=>
int(0)
["b"]=>
int(35)
["c"]=>
int(65)
}
- Output for 5.5.25, 5.5.34, 5.6.18, 7.0.5, 7.1.30
- array(3) {
["a"]=>
int(0)
["b"]=>
int(46)
["c"]=>
int(54)
}
- Output for 7.1.26
- array(3) {
["a"]=>
int(0)
["b"]=>
int(56)
["c"]=>
int(44)
}
- Output for 5.5.33
- array(3) {
["a"]=>
int(0)
["b"]=>
int(55)
["c"]=>
int(45)
}
- Output for 5.5.28
- array(3) {
["a"]=>
int(0)
["b"]=>
int(52)
["c"]=>
int(48)
}
preferences:
79.75 ms | 401 KiB | 90 Q