版權聲明:本文爲博主原創文章,未經博主允許不得轉載。 https://blog.csdn.net/phpbook/article/details/60592948
目標:在不調用任何PHP內置函數的前提下,把一個數組順序隨機打亂,變相的洗牌算法。
思路:遍歷數組,每一個元素都與另一個隨機$key元素進行位置交換,關鍵在於隨機$key的實現,馬上就能調用的外部隨機數,我只想到了時間戳和微秒數,就採取了截取微秒來生成隨機$key,下面是相關代碼。
/*
隨機打亂數組順序,不是調用任何PHP內置隨機函數
*/
error_reporting(0);
$arr = range(1,100);
print_r(shuffleDiy($arr));
function shuffleDiy($arr){
$len = count($arr);
if($len<=1){
return $arr;
}
for($i=0;$i<$len;$i++){
$temp = $arr[$i];
$rand = getRandNum($len);
$arr[$i] = $arr[$rand];
$arr[$rand] = $temp;
}
return $arr;
}
//生成隨機數函數,傳值數組長度,獲取微秒的幾個數字,作爲隨機數
function getRandNum($len){
$max = strlen($len);
$mic = current(explode(' ',microtime()));
$micc = next(explode('.',$mic));
$res = intval(substr(strrev($micc), 2,$max));
while($res>=$len){
$res = intval($res/2);
}
return $res;
}