PHP 随机打乱数组

$arr=[5,15,1,1,10,1,1,1,20];  //自己写的原始数组
    shuffle($arr);  //注意这里不要再给数组重新赋值
数组随机打乱的实现方法有多种,以下为你介绍不同编程语言的实现方式: ### Java 实现 利用 `Random` 随机打乱数组,示例代码如下: ```java import java.util.ArrayList; import java.util.List; import java.util.Random; public class ShuffleArray { public static void main(String[] args) { List<Integer> arr = new ArrayList<>(); arr.add(1); arr.add(2); arr.add(3); arr.add(4); arr.add(5); String[] s = new String[arr.size()]; for (int i = 0; i < s.length; i++) { int rand = new Random().nextInt(arr.size()); s[i] = String.valueOf(arr.get(rand).toString()); arr.remove(rand); } for (int i = 0; i < s.length; i++) { System.out.println(s[i]); } } } ``` 该方法的逻辑是通过随机数选取数组元素,将其放入新数组并从原列表移除,直至原列表为空,实现数组元素的随机排列[^1]。 ### JavaScript 实现 #### 随机排序法 ```javascript function shuffle(array) { array.sort(function () { return Math.random() - 0.5; }); return array; } let arr = [4, 1, 67, 12, 45, 121, 3]; console.log(shuffle(arr)); ``` 此方法利用 `sort` 函数和 `Math.random()` 生成随机数,通过随机比较结果来打乱数组元素顺序[^2]。 #### 最精简代码的打乱方法 ```javascript var arr = [4, 1, 67, 12, 45, 121, 3]; arr.sort(function () { return (0.5 - Math.random()); }); console.log(arr); ``` 同样借助 `sort` 函数,通过 `0.5 - Math.random()` 产生随机排序依据,打乱数组元素[^3]。 ### PHP 实现 #### 数组下标为连续数字的打乱方法 ```php function randArray($rArray) { $len = count($rArray); foreach ($rArray as $k => $v) { $r = mt_rand(0, $len - 1); $temp = $rArray[$k]; $rArray[$k] = $rArray[$r]; $rArray[$r] = $temp; } return $rArray; } $arr = [1, 2, 3, 4, 5]; print_r(randArray($arr)); ``` 该方法通过 `mt_rand` 生成随机索引,交换当前元素和随机位置元素,实现数组打乱,适用于下标连续的数组[^4]。 #### 数组下标不限的打乱方法 ```php function randArray2($rArray) { $keys = array_keys($rArray); $keys = randArray($keys); foreach ($keys as $k => $v) { $r2Array[$v] = $rArray[$v]; } return $r2Array; } $arr = ['a' => 1, 'b' => 2, 'c' => 3]; print_r(randArray2($arr)); ``` 先获取数组的键,对键数组进行打乱,再依据打乱后的键重新构建数组,适用于下标不限的数组[^4]。 #### 自定义打乱方法 ```php function custom_shuffle(array $arr): array { $length = count($arr); for ($i = 0; $i < $length; $i++) { $rand_index = mt_rand(0, $length - 1); if ($i != $rand_index) { list($arr[$i], $arr[$rand_index]) = [$arr[$rand_index], $arr[$i]]; } } return $arr; } $arr = [1, 2, 3, 4, 5, 6, 7]; print_r(custom_shuffle($arr)); ``` 遍历数组,生成随机索引,交换当前元素和随机位置元素,实现数组元素的随机打乱[^5]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值