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

<?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;
}

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

  1. huypv

    return array_merge(array_splice($arr, 0, $fix), array_slice(shuffle($arr) ? $arr : $arr, $n – $fix));

    # Lấy ra $fix phần tử đầu. Giữ lại phần đuôi, xáo trộn đuôi, lấy ra $n-$fix phần tử đầu trong đống đuôi đã xáo trộn. Gộp hai phần đã lấy lại với nhau.

Comments are closed.