我使用
range()
函数创建一个数组。
$range = range(1, 50);
但是,在执行
array_rand($range, 10)
时,我发现它选择了值 0 而从未选择值 50。 就好像它没有考虑 range(1, 50)
并使用了 range(0,49)
。
有谁知道是什么原因导致这种行为?
$range = range(1, 50);
for ($i = 1; $i <= 3; $i++) {
$card[] = array_values(array_rand($range, 10));
reset($range);
}
echo json_encode($card);
0
出现在结果中,而 50
从未出现。我做错了什么还是 PHP 中的正常行为?
array_rand()
函数不会从数组返回随机值;相反,它返回随机密钥。当您使用 range(1, 50)
时,您正在创建一个数组,其中值从 1 到 50,但该数组的键从 0 开始,一直到 49。这是 PHP 中数组的标准行为,其中数组索引从0.
要获取值而不是键,您可以将所选键映射到其相应的值。
$range = range(1, 50);
for ($i = 1; $i <= 3; $i++) {
$randomKeys = array_rand($range, 10);
// Map the keys to their corresponding values in $range
$randomValues = array_map(function($key) use ($range) {
return $range[$key];
}, $randomKeys);
$card[] = $randomValues;
}
echo json_encode($card);
array_map
用于将 array_rand
中的随机键转换为 $range 数组中相应的值。这样,您就会得到您期望的实际数字。