php随机打乱数组顺序保留键值(php对数组洗牌算法实现)

需求:日前在做一个词语造句https://zaoju.ipip5.com的网页时,想要实现每次访问显示造句例句的顺序不同。

目标:在不调用任何PHP内置函数的前提下,把一个数组顺序随机打乱,变相的洗牌算法。

思路:遍历数组,每一个元素都与另一个随机$key元素进行位置交换,关键在于随机$key的实现,马上就能调用的外部随机数,我只想到了时间戳和微秒数,就采取了截取微秒来生成随机$key,下面是相关代码。

 1 /*
 2 随机打乱数组顺序,不是调用任何PHP内置随机函数
 3  */
 4     error_reporting(0);
 5     $arr = range(1,100);
 6     print_r(shuffleDiy($arr));
 7     function shuffleDiy($arr){
 8         $len = count($arr);
 9         if($len<=1){
10             return $arr;
11         }
12         for($i=0;$i<$len;$i++){
13             $temp = $arr[$i];
14             $rand = getRandNum($len);
15             $arr[$i] = $arr[$rand];
16             $arr[$rand] = $temp;
17         }
18         return $arr;
19     }
20     //生成随机数函数,传值数组长度,获取微秒的几个数字,作为随机数
21     function getRandNum($len){
22         $max = strlen($len);
23         $mic = current(explode(' ',microtime()));
24         $micc = next(explode('.',$mic));
25         $res = intval(substr(strrev($micc), 2,$max));
26         while($res>=$len){
27             $res = intval($res/2);
28         }
29         return $res;
30     }

这样,我们每次访问造句网https://zaoju.ipip5.com时显示的造句例句就不同了!ok,nice!

posted @ 2021-12-30 17:32  大象已无形  阅读(298)  评论(0编辑  收藏  举报