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!
本文来自博客园,作者:大象已无形,转载请注明原文链接:https://www.cnblogs.com/mmm/p/shuzusuiji.html