array_rand() 没有从 range() 构建的数组中返回所有可能的值[重复]

问题描述 投票:0回答:1

我使用

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 中的正常行为?

php arrays random
1个回答
0
投票

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 数组中相应的值。这样,您就会得到您期望的实际数字。

© www.soinside.com 2019 - 2024. All rights reserved.