php shuffle实现
PHP 的 shuffle 函数实现
shuffle 是 PHP 内置的一个数组随机排序函数,能够随机打乱数组元素的顺序。该函数直接修改原数组,而非返回一个新数组。
基本语法:
shuffle(array &$array): bool
- 参数
$array是需要被随机排序的数组(引用传递)。 - 返回值是布尔值,表示操作是否成功(PHP 7.1.0 之前返回
true,之后返回随机排序后的数组)。
使用示例
$numbers = [1, 2, 3, 4, 5];
shuffle($numbers);
print_r($numbers);
输出可能是:
Array
(
[0] => 3
[1] => 1
[2] => 5
[3] => 2
[4] => 4
)
自定义 shuffle 实现
如果需要实现自定义的随机排序逻辑(例如保留键值或特定算法),可以手动实现类似功能。
方法 1:Fisher-Yates 洗牌算法
function customShuffle(array &$array) {
$count = count($array);
for ($i = $count - 1; $i > 0; $i--) {
$j = random_int(0, $i);
[$array[$i], $array[$j]] = [$array[$j], $array[$i]];
}
}
方法 2:使用 array_rand 随机键

function customShuffleAssoc(array $array) {
$keys = array_keys($array);
shuffle($keys);
$shuffled = [];
foreach ($keys as $key) {
$shuffled[$key] = $array[$key];
}
return $shuffled;
}
注意事项
shuffle会删除原数组的键名,仅保留值。如需保留键名,需使用array_keys和array_values配合处理。- 随机性依赖系统的随机数生成器(如
random_int或rand),在加密安全场景需使用random_int。 - 从 PHP 7.1.0 开始,
shuffle使用内部随机化算法(基于 Mersenne Twister)。






