PHP從一個數組中隨機的取出若干個不同的數

jopen 9年前發布 | 1K 次閱讀 PHP


    /*

 * 此程序是從一個不重復的數組中隨機的取出若干個不同的元素 
 * 難點是防止在取數的時候出現已經取到過的情況(特別是取到最后),需要盡可能的降低碰撞 
 */  
//第一種算法,CSDN上別人的想法  
/* 
$num = 0; 
$array = array(1, 2, 3, 4, 5, 6, 7, 8, 9); 
$arr = array(); 
$g = 5; 
$tag = true; 
while ($tag) { 
    $count = count($array); 
    $t = rand(0, 1); 
    if ($t == 1) { 
        $arr[] = $array[$num]; 
        unset($array[$num]); 
    } 
    $num ++; 
    if (count($arr) == $g) { 
        $tag = false; 
    } 
    if ($num == $count) { 
        $num = 0;   //循環 
    } 
} 


var_dump($arr); 
*/  
//第二種算法,自己想的。  
//可以在每次取出數據之后將該數據和最后沒有獲取的數據替換,然后再去沒有取得的數據中隨機獲取值  


function swap(&$a, &$b)  
{  
    $temp = $b;  
    $b = $a;  
    $a = $temp;  
}  


$result = array();  
$src = array();  
for($i = 0 ; $i < 40 ; $i++)  
{  
    $src[] = $i + 1;  
}  
$arr_len = count($src);  
$count = 20;  
$index = 0;  
while($index < $count)  
{  
    $random = rand(0, $arr_len - $index - 1);  
    $result[] = $src[$random];  
    swap($src[$random] , $src[$arr_len - $index - 1]);  
    $index += 1;  
}  


print_r(json_encode($result));  
print_r(json_encode($src));  </pre> 


 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!