php 实现随机
生成随机数
PHP提供了多种生成随机数的函数,适用于不同场景。rand()函数可以生成指定范围内的随机整数,例如rand(1, 100)生成1到100之间的随机数。mt_rand()是更快的替代方案,基于Mersenne Twister算法,使用方式类似mt_rand(1, 100)。
random_int()函数生成密码学安全的随机整数,适用于高安全性需求场景,例如random_int(1, 100)。random_bytes()生成指定长度的随机字节字符串,适合生成令牌或密钥,如random_bytes(16)。
随机数组元素
从数组中随机选择元素可以使用array_rand()函数,该函数返回随机键名或键名数组。例如$randomKey = array_rand($array)获取单个随机键,$randomKeys = array_rand($array, 3)获取多个随机键。
shuffle()函数会打乱数组顺序并重新索引,直接修改原数组。如果需要保留原数组,可以先复制数组再打乱顺序。

随机字符串
生成随机字符串可结合str_shuffle()和substr()函数。str_shuffle()随机打乱字符串字符顺序,例如substr(str_shuffle('abcdefghijklmnopqrstuvwxyz'), 0, 8)生成8位随机字母字符串。
更复杂的随机字符串可使用字符池方式:

$chars = '0123456789abcdefghijklmnopqrstuvwxyz';
$randomString = '';
for ($i = 0; $i < 10; $i++) {
$randomString .= $chars[rand(0, strlen($chars) - 1)];
}
概率控制
实现按概率随机选择可使用权重数组和累计概率方法。创建权重数组计算总权重,生成随机数判断落在哪个区间:
$items = [
['name' => 'A', 'weight' => 5],
['name' => 'B', 'weight' => 3],
['name' => 'C', 'weight' => 2]
];
$total = array_sum(array_column($items, 'weight'));
$random = mt_rand(1, $total);
$current = 0;
foreach ($items as $item) {
$current += $item['weight'];
if ($random <= $current) {
$selected = $item['name'];
break;
}
}
唯一随机数
生成不重复随机数可先创建数值范围数组,打乱顺序后截取所需数量。例如生成1-100范围内10个不重复随机数:
$numbers = range(1, 100);
shuffle($numbers);
$result = array_slice($numbers, 0, 10);
随机日期时间
生成随机日期时间可组合随机数与时区转换:
$start = strtotime('2020-01-01');
$end = strtotime('2023-12-31');
$randomTimestamp = mt_rand($start, $end);
$randomDate = date('Y-m-d H:i:s', $randomTimestamp);






