我正在尝试从0-n生成一个随机数组,然后随机播放(但要确保键和值不匹配).
例如:
0 => 3
1 => 2
2 => 4
3 => 0
4 => 1
Run Code Online (Sandbox Code Playgroud)
请注意,键和值都是0-4,但键和值都不相同.
有什么想法吗?
sto*_*yau 17
一个更短的解决方案:
$random_number_array = range(0, 100);
shuffle($random_number_array );
$random_number_array = array_slice($random_number_array ,0,10);
print_r($random_number_array);
Run Code Online (Sandbox Code Playgroud)
结果将是:
[0] => 53
[1] => 6
[2] => 16
[3] => 59
[4] => 8
[5] => 18
[6] => 62
[7] => 39
[8] => 22
[9] => 26
Run Code Online (Sandbox Code Playgroud)
$max = 5;
$done = false;
while(!$done){
$numbers = range(0, $max);
shuffle($numbers);
$done = true;
foreach($numbers as $key => $val){
if($key == $val){
$done = false;
break;
}
}
}
Run Code Online (Sandbox Code Playgroud)
这将生成一个包含 10 个从 0 到 100 的随机数的数组:
array_map(function () {
return rand(0, 100);
}, array_fill(0, 10, null));
Run Code Online (Sandbox Code Playgroud)
结果:
array(10) {
[0]=>
int(15)
[1]=>
int(97)
[2]=>
int(20)
[3]=>
int(64)
[4]=>
int(57)
[5]=>
int(38)
[6]=>
int(16)
[7]=>
int(53)
[8]=>
int(56)
[9]=>
int(22)
}
Run Code Online (Sandbox Code Playgroud)
解释:
array_fill(0, 10, null)将生成一个包含 10 个空项的数组array_map将回调(第一个参数)应用于它接收的数组的每个项目(第二个参数)。在此示例中,我们只为每个数组项返回一个随机数。游乐场: https: //3v4l.org/FffN6
如果您需要确保每个生成的数字都是唯一的:
array(10) {
[0]=>
int(15)
[1]=>
int(97)
[2]=>
int(20)
[3]=>
int(64)
[4]=>
int(57)
[5]=>
int(38)
[6]=>
int(16)
[7]=>
int(53)
[8]=>
int(56)
[9]=>
int(22)
}
Run Code Online (Sandbox Code Playgroud)