PHP 如何获取与数组值不同的随机数
PHP how to get a random number that is different from values of an array
示例:
我有一个包含 3 个值的数组:
0 = 1
1 = 4
2 = 5
我想得到一个随机数,比如
$random = rand(1, 5);
但是我需要得到一个不同于数组值的数字。我需要 return 2 或 3。
这应该适合你:
(这里我创建了一个范围,从你得到随机数的地方 range()
. Then I get rid of these numbers which you don't want with array_diff()
. And at the end you can simply use array_rand()
得到一个随机数 key/number)
<?php
$blacklist = [1, 4, 5];
$range = range(1, 5);
$randomArray = array_diff($range, $blacklist);
echo $randomArray[array_rand($randomArray, 1)];
?>
输出:
2 or 3
编辑:
刚刚做了一些基准测试,带循环的方法比上面的代码慢得多!
我从 1...100'000 创建了一个数组(黑名单),从 1...100'001 创建了一个随机数数组。
因此该脚本应该只创建 one/unique 个随机数。使用循环方法会出现错误:
Fatal error: Maximum execution time of 30 seconds exceeded
使用上面发布的代码平均需要 1.5 秒。
示例: 我有一个包含 3 个值的数组:
0 = 1
1 = 4
2 = 5
我想得到一个随机数,比如
$random = rand(1, 5);
但是我需要得到一个不同于数组值的数字。我需要 return 2 或 3。
这应该适合你:
(这里我创建了一个范围,从你得到随机数的地方 range()
. Then I get rid of these numbers which you don't want with array_diff()
. And at the end you can simply use array_rand()
得到一个随机数 key/number)
<?php
$blacklist = [1, 4, 5];
$range = range(1, 5);
$randomArray = array_diff($range, $blacklist);
echo $randomArray[array_rand($randomArray, 1)];
?>
输出:
2 or 3
编辑:
刚刚做了一些基准测试,带循环的方法比上面的代码慢得多!
我从 1...100'000 创建了一个数组(黑名单),从 1...100'001 创建了一个随机数数组。
因此该脚本应该只创建 one/unique 个随机数。使用循环方法会出现错误:
Fatal error: Maximum execution time of 30 seconds exceeded
使用上面发布的代码平均需要 1.5 秒。