<?php
// id => weight
$ads = [
10 => 5,
20 => 10,
30 => 15
];
function show_ad($ads) {
// calculate the total of all weights
$combined = array_sum($ads);
// pick a random number from $combined weights
$random = rand(0, $combined - 1);
// keep subtracting weight until we drop below an ad weight
foreach ($ads as $id => $weight) {
if ($random < $weight) return $id;
$random -= $weight;
}
return $random;
}
function simulate_views($ads, $rounds = 100) {
$result = [];
for ($i = 0; $i < $rounds; $i++) {
$id = show_ad($ads);
$result[$id] = isset($result[$id]) ? $result[$id]+1: 1;
}
return $result;
}
print_r(simulate_views($ads));
- Output for 8.2.1
- Array
(
[30] => 54
[10] => 19
[20] => 27
)
- Output for 8.1.13
- Array
(
[20] => 34
[10] => 18
[30] => 48
)
- Output for 8.1.12
- Array
(
[30] => 49
[20] => 37
[10] => 14
)
- Output for 8.1.11
- Array
(
[20] => 36
[30] => 53
[10] => 11
)
- Output for 8.1.10
- Array
(
[20] => 28
[30] => 49
[10] => 23
)
- Output for 8.1.9
- Array
(
[30] => 43
[10] => 24
[20] => 33
)
- Output for 5.6.14, 8.1.8
- Array
(
[10] => 20
[30] => 49
[20] => 31
)
- Output for 8.1.7
- Array
(
[30] => 60
[20] => 30
[10] => 10
)
- Output for 8.1.6
- Array
(
[10] => 15
[30] => 59
[20] => 26
)
- Output for 8.1.5
- Array
(
[30] => 52
[10] => 12
[20] => 36
)
- Output for 8.1.4
- Array
(
[20] => 37
[30] => 45
[10] => 18
)
- Output for 8.1.3
- Array
(
[20] => 30
[30] => 57
[10] => 13
)
- Output for 8.1.2
- Array
(
[20] => 40
[30] => 42
[10] => 18
)
- Output for 8.1.1
- Array
(
[30] => 46
[20] => 40
[10] => 14
)
- Output for 8.1.0
- Array
(
[30] => 48
[20] => 27
[10] => 25
)
- Output for 8.0.26
- Array
(
[20] => 33
[10] => 19
[30] => 48
)
- Output for 8.0.25
- Array
(
[20] => 29
[10] => 19
[30] => 52
)
- Output for 8.0.24
- Array
(
[20] => 31
[30] => 53
[10] => 16
)
- Output for 8.0.23
- Array
(
[30] => 55
[10] => 18
[20] => 27
)
- Output for 8.0.22
- Array
(
[10] => 21
[30] => 46
[20] => 33
)
- Output for 8.0.21
- Array
(
[10] => 12
[20] => 36
[30] => 52
)
- Output for 7.1.21, 8.0.20
- Array
(
[30] => 45
[20] => 37
[10] => 18
)
- Output for 8.0.19
- Array
(
[10] => 20
[30] => 52
[20] => 28
)
- Output for 8.0.18
- Array
(
[20] => 30
[10] => 22
[30] => 48
)
- Output for 8.0.17
- Array
(
[30] => 51
[10] => 18
[20] => 31
)
- Output for 8.0.16
- Array
(
[30] => 49
[20] => 39
[10] => 12
)
- Output for 8.0.15
- Array
(
[30] => 58
[20] => 21
[10] => 21
)
- Output for 7.2.5, 8.0.14
- Array
(
[30] => 50
[20] => 35
[10] => 15
)
- Output for 8.0.13
- Array
(
[30] => 44
[20] => 33
[10] => 23
)
- Output for 8.0.12
- Array
(
[30] => 53
[20] => 31
[10] => 16
)
- Output for 8.0.11
- Array
(
[20] => 39
[30] => 46
[10] => 15
)
- Output for 8.0.10
- Array
(
[20] => 32
[30] => 46
[10] => 22
)
- Output for 8.0.9
- Array
(
[30] => 53
[10] => 11
[20] => 36
)
- Output for 8.0.8
- Array
(
[30] => 47
[20] => 34
[10] => 19
)
- Output for 8.0.7
- Array
(
[30] => 51
[20] => 39
[10] => 10
)
- Output for 7.2.18, 8.0.6
- Array
(
[30] => 51
[20] => 34
[10] => 15
)
- Output for 8.0.5
- Array
(
[30] => 39
[20] => 42
[10] => 19
)
- Output for 8.0.3
- Array
(
[10] => 24
[30] => 41
[20] => 35
)
- Output for 8.0.2
- Array
(
[30] => 56
[20] => 31
[10] => 13
)
- Output for 8.0.1
- Array
(
[30] => 52
[20] => 31
[10] => 17
)
- Output for 8.0.0
- Array
(
[20] => 28
[30] => 50
[10] => 22
)
- Output for 7.2.21, 7.4.33
- Array
(
[30] => 48
[20] => 39
[10] => 13
)
- Output for 7.4.32
- Array
(
[30] => 51
[20] => 28
[10] => 21
)
- Output for 7.4.30
- Array
(
[30] => 58
[20] => 31
[10] => 11
)
- Output for 7.4.29
- Array
(
[30] => 46
[20] => 42
[10] => 12
)
- Output for 7.4.28
- Array
(
[20] => 35
[10] => 15
[30] => 50
)
- Output for 7.4.27
- Array
(
[20] => 27
[30] => 51
[10] => 22
)
- Output for 7.2.27, 7.4.26
- Array
(
[20] => 37
[30] => 50
[10] => 13
)
- Output for 7.4.25
- Array
(
[30] => 56
[10] => 16
[20] => 28
)
- Output for 7.4.24
- Array
(
[20] => 42
[30] => 47
[10] => 11
)
- Output for 7.4.23
- Array
(
[10] => 16
[20] => 32
[30] => 52
)
- Output for 7.4.22
- Array
(
[20] => 29
[10] => 18
[30] => 53
)
- Output for 7.4.21
- Array
(
[30] => 52
[10] => 10
[20] => 38
)
- Output for 7.4.20
- Array
(
[10] => 17
[20] => 31
[30] => 52
)
- Output for 7.4.19
- Array
(
[30] => 39
[10] => 24
[20] => 37
)
- Output for 7.4.18
- Array
(
[30] => 50
[20] => 32
[10] => 18
)
- Output for 7.4.16
- Array
(
[10] => 14
[30] => 47
[20] => 39
)
- Output for 5.6.25, 7.1.31, 7.4.15
- Array
(
[30] => 48
[20] => 34
[10] => 18
)
- Output for 5.6.3, 7.4.14
- Array
(
[20] => 40
[30] => 47
[10] => 13
)
- Output for 7.4.13
- Array
(
[30] => 51
[10] => 14
[20] => 35
)
- Output for 7.4.12
- Array
(
[10] => 14
[30] => 55
[20] => 31
)
- Output for 7.4.11
- Array
(
[20] => 41
[30] => 45
[10] => 14
)
- Output for 7.4.10
- Array
(
[10] => 15
[30] => 58
[20] => 27
)
- Output for 7.4.9
- Array
(
[30] => 42
[20] => 41
[10] => 17
)
- Output for 7.4.8
- Array
(
[30] => 43
[10] => 15
[20] => 42
)
- Output for 7.4.7
- Array
(
[30] => 50
[10] => 12
[20] => 38
)
- Output for 7.4.6
- Array
(
[20] => 30
[10] => 18
[30] => 52
)
- Output for 7.4.5
- Array
(
[30] => 50
[10] => 15
[20] => 35
)
- Output for 7.4.4
- Array
(
[30] => 48
[10] => 15
[20] => 37
)
- Output for 7.4.3
- Array
(
[30] => 45
[20] => 34
[10] => 21
)
- Output for 7.4.2
- Array
(
[20] => 35
[30] => 42
[10] => 23
)
- Output for 7.4.1
- Array
(
[20] => 38
[30] => 49
[10] => 13
)
- Output for 7.4.0
- Array
(
[30] => 59
[20] => 29
[10] => 12
)
- Output for 7.3.33
- Array
(
[30] => 53
[20] => 30
[10] => 17
)
- Output for 7.3.32
- Array
(
[30] => 56
[10] => 21
[20] => 23
)
- Output for 7.3.31
- Array
(
[20] => 36
[10] => 16
[30] => 48
)
- Output for 7.3.30
- Array
(
[30] => 56
[10] => 14
[20] => 30
)
- Output for 7.3.29
- Array
(
[30] => 47
[20] => 37
[10] => 16
)
- Output for 7.2.26, 7.3.28
- Array
(
[30] => 56
[20] => 34
[10] => 10
)
- Output for 7.3.27
- Array
(
[20] => 37
[10] => 18
[30] => 45
)
- Output for 7.0.27, 7.3.26
- Array
(
[30] => 53
[20] => 34
[10] => 13
)
- Output for 7.3.25
- Array
(
[30] => 53
[20] => 36
[10] => 11
)
- Output for 7.3.24
- Array
(
[10] => 16
[20] => 38
[30] => 46
)
- Output for 7.3.23
- Array
(
[20] => 38
[30] => 46
[10] => 16
)
- Output for 7.3.22
- Array
(
[30] => 55
[20] => 35
[10] => 10
)
- Output for 7.3.21
- Array
(
[30] => 43
[10] => 22
[20] => 35
)
- Output for 7.3.20
- Array
(
[30] => 47
[20] => 36
[10] => 17
)
- Output for 7.3.19
- Array
(
[20] => 29
[30] => 53
[10] => 18
)
- Output for 7.3.18
- Array
(
[20] => 34
[30] => 42
[10] => 24
)
- Output for 7.0.10, 7.3.17
- Array
(
[30] => 52
[10] => 16
[20] => 32
)
- Output for 7.3.16
- Array
(
[30] => 56
[20] => 25
[10] => 19
)
- Output for 7.3.3, 7.3.15
- Array
(
[20] => 36
[30] => 49
[10] => 15
)
- Output for 7.3.14
- Array
(
[10] => 21
[30] => 40
[20] => 39
)
- Output for 7.3.13
- Array
(
[10] => 20
[30] => 42
[20] => 38
)
- Output for 7.0.13, 7.3.12
- Array
(
[30] => 55
[10] => 11
[20] => 34
)
- Output for 7.3.11
- Array
(
[30] => 41
[20] => 41
[10] => 18
)
- Output for 5.6.12, 7.3.10
- Array
(
[10] => 19
[20] => 37
[30] => 44
)
- Output for 7.3.9
- Array
(
[30] => 52
[20] => 29
[10] => 19
)
- Output for 7.3.8
- Array
(
[30] => 45
[10] => 22
[20] => 33
)
- Output for 7.3.7
- Array
(
[30] => 46
[10] => 19
[20] => 35
)
- Output for 7.3.6
- Array
(
[20] => 38
[10] => 11
[30] => 51
)
- Output for 7.3.5
- Array
(
[30] => 52
[10] => 19
[20] => 29
)
- Output for 7.0.0, 7.3.4
- Array
(
[20] => 34
[30] => 49
[10] => 17
)
- Output for 7.3.2
- Array
(
[10] => 19
[30] => 50
[20] => 31
)
- Output for 7.3.1
- Array
(
[20] => 32
[10] => 22
[30] => 46
)
- Output for 7.3.0
- Array
(
[20] => 30
[30] => 51
[10] => 19
)
- Output for 7.2.34
- Array
(
[30] => 52
[20] => 30
[10] => 18
)
- Output for 7.2.33
- Array
(
[30] => 47
[20] => 33
[10] => 20
)
- Output for 7.2.32
- Array
(
[20] => 31
[30] => 54
[10] => 15
)
- Output for 7.0.22, 7.2.31
- Array
(
[30] => 51
[20] => 35
[10] => 14
)
- Output for 7.2.30
- Array
(
[20] => 40
[30] => 46
[10] => 14
)
- Output for 7.2.29
- Array
(
[30] => 53
[10] => 18
[20] => 29
)
- Output for 7.2.28
- Array
(
[30] => 61
[20] => 20
[10] => 19
)
- Output for 7.2.25
- Array
(
[20] => 43
[30] => 49
[10] => 8
)
- Output for 7.2.24
- Array
(
[30] => 54
[20] => 33
[10] => 13
)
- Output for 7.2.23
- Array
(
[30] => 53
[10] => 14
[20] => 33
)
- Output for 7.2.22
- Array
(
[20] => 40
[30] => 41
[10] => 19
)
- Output for 7.2.20
- Array
(
[20] => 39
[30] => 51
[10] => 10
)
- Output for 7.2.19
- Array
(
[10] => 15
[20] => 30
[30] => 55
)
- Output for 7.2.0, 7.2.17
- Array
(
[30] => 51
[10] => 16
[20] => 33
)
- Output for 7.0.11, 7.2.16
- Array
(
[30] => 56
[20] => 29
[10] => 15
)
- Output for 7.2.15
- Array
(
[30] => 54
[10] => 17
[20] => 29
)
- Output for 7.2.14
- Array
(
[20] => 36
[30] => 50
[10] => 14
)
- Output for 7.2.13
- Array
(
[30] => 53
[20] => 33
[10] => 14
)
- Output for 7.2.12
- Array
(
[30] => 50
[20] => 34
[10] => 16
)
- Output for 7.0.29, 7.2.11
- Array
(
[10] => 14
[30] => 56
[20] => 30
)
- Output for 7.2.10
- Array
(
[30] => 48
[20] => 37
[10] => 15
)
- Output for 7.2.9
- Array
(
[10] => 19
[30] => 48
[20] => 33
)
- Output for 5.6.34, 7.2.8
- Array
(
[30] => 60
[20] => 27
[10] => 13
)
- Output for 7.2.7
- Array
(
[30] => 54
[10] => 13
[20] => 33
)
- Output for 7.2.6
- Array
(
[30] => 50
[10] => 14
[20] => 36
)
- Output for 7.2.4
- Array
(
[20] => 26
[30] => 55
[10] => 19
)
- Output for 7.2.3
- Array
(
[30] => 48
[20] => 31
[10] => 21
)
- Output for 7.2.2
- Array
(
[10] => 17
[30] => 60
[20] => 23
)
- Output for 7.2.1
- Array
(
[30] => 49
[20] => 35
[10] => 16
)
- Output for 7.1.33
- Array
(
[30] => 51
[10] => 22
[20] => 27
)
- Output for 7.1.32
- Array
(
[20] => 27
[30] => 55
[10] => 18
)
- Output for 7.1.30
- Array
(
[10] => 12
[30] => 52
[20] => 36
)
- Output for 7.1.22, 7.1.29
- Array
(
[30] => 49
[10] => 18
[20] => 33
)
- Output for 7.1.28
- Array
(
[30] => 59
[10] => 10
[20] => 31
)
- Output for 7.1.27
- Array
(
[10] => 23
[20] => 26
[30] => 51
)
- Output for 7.1.26
- Array
(
[20] => 32
[30] => 53
[10] => 15
)
- Output for 7.1.25
- Array
(
[30] => 49
[20] => 29
[10] => 22
)
- Output for 5.6.37, 7.1.24
- Array
(
[30] => 53
[20] => 35
[10] => 12
)
- Output for 7.1.23
- Array
(
[10] => 18
[30] => 43
[20] => 39
)
- Output for 7.1.20
- Array
(
[10] => 14
[30] => 48
[20] => 38
)
- Output for 7.1.19
- Array
(
[20] => 35
[30] => 51
[10] => 14
)
- Output for 7.1.18
- Array
(
[30] => 57
[20] => 32
[10] => 11
)
- Output for 7.1.17
- Array
(
[10] => 24
[30] => 47
[20] => 29
)
- Output for 7.1.16
- Array
(
[30] => 43
[10] => 18
[20] => 39
)
- Output for 7.1.15
- Array
(
[10] => 15
[20] => 32
[30] => 53
)
- Output for 7.1.14
- Array
(
[30] => 55
[20] => 33
[10] => 12
)
- Output for 7.1.13
- Array
(
[20] => 35
[30] => 43
[10] => 22
)
- Output for 7.1.12
- Array
(
[30] => 56
[20] => 32
[10] => 12
)
- Output for 7.1.11
- Array
(
[10] => 15
[30] => 47
[20] => 38
)
- Output for 7.1.10
- Array
(
[20] => 38
[30] => 43
[10] => 19
)
- Output for 7.1.9
- Array
(
[20] => 25
[30] => 57
[10] => 18
)
- Output for 7.1.8
- Array
(
[30] => 62
[20] => 23
[10] => 15
)
- Output for 7.1.7
- Array
(
[20] => 34
[10] => 17
[30] => 49
)
- Output for 7.1.6
- Array
(
[30] => 51
[20] => 40
[10] => 9
)
- Output for 7.1.5
- Array
(
[20] => 34
[30] => 52
[10] => 14
)
- Output for 7.1.4
- Array
(
[10] => 10
[20] => 40
[30] => 50
)
- Output for 7.1.3
- Array
(
[30] => 52
[20] => 27
[10] => 21
)
- Output for 7.1.2
- Array
(
[10] => 8
[30] => 57
[20] => 35
)
- Output for 7.1.1
- Array
(
[20] => 32
[30] => 44
[10] => 24
)
- Output for 7.1.0
- Array
(
[30] => 57
[10] => 18
[20] => 25
)
- Output for 7.0.33
- Array
(
[30] => 51
[10] => 12
[20] => 37
)
- Output for 7.0.32
- Array
(
[30] => 54
[20] => 32
[10] => 14
)
- Output for 7.0.31
- Array
(
[30] => 50
[20] => 38
[10] => 12
)
- Output for 7.0.30
- Array
(
[30] => 58
[20] => 26
[10] => 16
)
- Output for 7.0.4, 7.0.28
- Array
(
[30] => 49
[10] => 17
[20] => 34
)
- Output for 7.0.26
- Array
(
[20] => 39
[30] => 43
[10] => 18
)
- Output for 7.0.25
- Array
(
[30] => 47
[20] => 35
[10] => 18
)
- Output for 7.0.24
- Array
(
[20] => 37
[30] => 46
[10] => 17
)
- Output for 7.0.23
- Array
(
[10] => 18
[20] => 30
[30] => 52
)
- Output for 7.0.21
- Array
(
[20] => 33
[30] => 50
[10] => 17
)
- Output for 7.0.20
- Array
(
[30] => 53
[10] => 23
[20] => 24
)
- Output for 7.0.19
- Array
(
[30] => 58
[20] => 25
[10] => 17
)
- Output for 7.0.18
- Array
(
[10] => 13
[30] => 54
[20] => 33
)
- Output for 7.0.17
- Array
(
[20] => 35
[30] => 53
[10] => 12
)
- Output for 7.0.16
- Array
(
[30] => 54
[20] => 29
[10] => 17
)
- Output for 7.0.15
- Array
(
[30] => 55
[20] => 31
[10] => 14
)
- Output for 7.0.14
- Array
(
[30] => 44
[10] => 21
[20] => 35
)
- Output for 7.0.12
- Array
(
[30] => 53
[10] => 16
[20] => 31
)
- Output for 7.0.9
- Array
(
[10] => 23
[20] => 31
[30] => 46
)
- Output for 5.6.7, 7.0.8
- Array
(
[20] => 27
[30] => 54
[10] => 19
)
- Output for 7.0.7
- Array
(
[20] => 39
[30] => 50
[10] => 11
)
- Output for 7.0.6
- Array
(
[10] => 19
[20] => 29
[30] => 52
)
- Output for 7.0.5
- Array
(
[20] => 46
[30] => 41
[10] => 13
)
- Output for 7.0.3
- Array
(
[30] => 59
[10] => 15
[20] => 26
)
- Output for 7.0.2
- Array
(
[20] => 30
[30] => 49
[10] => 21
)
- Output for 7.0.1
- Array
(
[30] => 51
[20] => 37
[10] => 12
)
- Output for 5.6.40
- Array
(
[20] => 41
[30] => 49
[10] => 10
)
- Output for 5.6.39
- Array
(
[20] => 35
[10] => 14
[30] => 51
)
- Output for 5.6.38
- Array
(
[30] => 50
[10] => 13
[20] => 37
)
- Output for 5.6.29, 5.6.36
- Array
(
[20] => 37
[30] => 48
[10] => 15
)
- Output for 5.6.35
- Array
(
[30] => 44
[20] => 34
[10] => 22
)
- Output for 5.6.33
- Array
(
[20] => 33
[30] => 48
[10] => 19
)
- Output for 5.6.32
- Array
(
[20] => 32
[30] => 54
[10] => 14
)
- Output for 5.6.31
- Array
(
[30] => 50
[10] => 23
[20] => 27
)
- Output for 5.6.30
- Array
(
[10] => 21
[20] => 30
[30] => 49
)
- Output for 5.6.28
- Array
(
[30] => 50
[20] => 29
[10] => 21
)
- Output for 5.6.27
- Array
(
[10] => 14
[30] => 46
[20] => 40
)
- Output for 5.6.26
- Array
(
[10] => 15
[20] => 36
[30] => 49
)
- Output for 5.6.24
- Array
(
[30] => 51
[20] => 26
[10] => 23
)
- Output for 5.6.6, 5.6.23
- Array
(
[20] => 32
[30] => 51
[10] => 17
)
- Output for 5.6.22
- Array
(
[20] => 36
[10] => 17
[30] => 47
)
- Output for 5.6.21
- Array
(
[20] => 30
[10] => 15
[30] => 55
)
- Output for 5.6.20
- Array
(
[30] => 62
[10] => 14
[20] => 24
)
- Output for 5.6.19
- Array
(
[10] => 24
[30] => 50
[20] => 26
)
- Output for 5.6.18
- Array
(
[20] => 29
[30] => 58
[10] => 13
)
- Output for 5.6.17
- Array
(
[10] => 22
[20] => 35
[30] => 43
)
- Output for 5.6.16
- Array
(
[30] => 55
[10] => 19
[20] => 26
)
- Output for 5.6.15
- Array
(
[30] => 55
[20] => 28
[10] => 17
)
- Output for 5.6.13
- Array
(
[10] => 9
[30] => 59
[20] => 32
)
- Output for 5.6.11
- Array
(
[30] => 58
[10] => 10
[20] => 32
)
- Output for 5.6.10
- Array
(
[30] => 43
[20] => 35
[10] => 22
)
- Output for 5.6.9
- Array
(
[20] => 37
[30] => 44
[10] => 19
)
- Output for 5.6.8
- Array
(
[10] => 20
[20] => 28
[30] => 52
)
- Output for 5.6.5
- Array
(
[30] => 45
[20] => 35
[10] => 20
)
- Output for 5.6.4
- Array
(
[20] => 32
[10] => 11
[30] => 57
)
- Output for 5.6.2
- Array
(
[20] => 33
[10] => 17
[30] => 50
)
- Output for 5.6.1
- Array
(
[10] => 17
[30] => 44
[20] => 39
)
- Output for 5.6.0
- Array
(
[30] => 58
[10] => 11
[20] => 31
)
preferences:
84.71 ms | 720 KiB | 5 Q