Archive

Posts Tagged ‘random’

Trích ra ngẫu nhiên một số phần tử của mảng

March 18th, 2010 No comments

<?php
/**
* Hàm lấy ra ngẫu nhiên $n phần tử từ một mảng $arr
* Trong đó có $fix phần tử là các phần tử đầu tiên của mảng $arr
* (Thực chất số phần từ ngẫu nhiên chỉ là $n – $fix)
* @param array $arr Mảng các phần tử (e1, e2, e3)
* @param int $n Tổng số phần tử sẽ lấy ra
* @param int $fix Số phần tử lấy ra từ đầu mảng
* @return array Mảng các phần tử thu được
*/
function getRandomItems($arr, $n=5, $fix=3) {
    #$arr = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17);
    $total = count($arr);
    if ($n >= $total) {
        return $arr;  
    }
    $ret = array();
    
    for($i = 0; $i < $fix && $i < $total; $i++) {
        $ret[] = $arr[$i];
        unset($arr[$i]);
    }
    
    #echo implode(',', $ret);
    #echo " – ";
    #echo implode(',', $arr);
    
    if ($n > $fix && $n < $total) {
        $arrRandKey = array_rand($arr, $n – $fix);
        foreach ($arrRandKey as $key) {
            $ret[] = $arr[$key];
        }
    }
    #echo "\n";
    #echo implode(',', $ret);
    return $ret;
}

Categories: Chỉ dẫn lập trình Tags: , ,

Lấy bản ghi ngẫu nhiên từ database

February 8th, 2010 No comments

Làm thế nào để lấy ra một số bản ghi ngẫu nhiên từ database?
Nếu tư duy một cách đơn giản thì đầu tiên bạn sẽ phải generate các mã ID ngẫu nhiên rồi từ các mã ID đó query lấy ra bản ghi tương ứng.
Tuy nhiên mã ID generate ra phải làm sao đảm bảo là có tương ứng một bản ghi với nó :-? Điều này có vẻ khó. Thôi vứt đê, đừng bận tâm, bởi MySQL đã hỗ trợ sẵn việc lấy ra các bản ghi ngẫu nhiên rồi :-j

Ví dụ nè:
- Lấy ra ngẫu nhiên 10 người may mắn để trao giải thưởng may mắn sau khi tàn cuộc vui
SELECT * FROM people ORDER BY RAND() limit 10;
- Lấy ra 5 người phụ nữ ngẫu nhiên may mắn để tôn vinh
SELECT * FROM people WHERE sex=’female’ ORDER BY RAND() LIMIT 5;