3v4l.org

run code in 300+ PHP versions simultaneously
<?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