【DAY.9】php隨機打亂數組順序(洗牌算法實現)

版權聲明:本文爲博主原創文章,未經博主允許不得轉載。 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;
	}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章