<?php
function array_rand_cryptographically_secure(array $array): int|string {
$max = count($array) - 1;
if ($max < 0) {
throw new ValueError ('Argument #1 ($array) cannot be empty');
}
if (function_exists('array_is_list') && array_is_list($array)) {
// optimization, this avoids creating a copy of all the keys
return random_int(0, $max);
}
return array_keys($array)[random_int(0, $max)];
}
$tests = [
[5, 6, 7],
['a' => 1, 'b' => 2, 'c' => 3],
['zero', 4 => 'four', 9 => 'nine']
];
foreach ($tests as $test) {
echo array_rand_cryptographically_secure($test) . "\n";
}
- Output for 8.0.13, 8.1.5
- 0
c
0
- Output for 8.1.4
- 1
b
4
- Output for 8.1.3
- 0
c
4
- Output for 8.0.2, 8.1.1 - 8.1.2
- 1
b
0
- Output for 8.0.17, 8.1.0
- 1
c
0
- Output for 8.0.3, 8.0.9, 8.0.18
- 2
a
9
- Output for 8.0.16
- 2
c
0
- Output for 8.0.15
- 2
b
4
- Output for 8.0.14
- 1
c
9
- Output for 8.0.6, 8.0.12
- 2
c
4
- Output for 8.0.11
- 0
b
0
- Output for 8.0.10
- 0
b
4
- Output for 8.0.8
- 0
c
9
- Output for 8.0.7
- 1
a
9
- Output for 8.0.5
- 1
c
4
- Output for 8.0.1
- 0
a
0
- Output for 7.4.0 - 7.4.29
- Parse error: syntax error, unexpected '|', expecting '{' in /in/VK1pF on line 3
Process exited with code 255.
preferences:
81.59 ms | 401 KiB | 57 Q