萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 程式設計 >  >> 網路程式設計 >> PHP 程式設計

PHP 從陣列隨機抽取元素類實現

GetValues 類:無重複隨機抽取

通過隨機索引取值,隨即 unset 該索引並將後續元素前移,保證不重複抽取。

完整類代碼

<?php
class GetValues {
    private $inputArray = [];
    private $number = 0;

    public function inputValue($inputArray) {
        $this->inputArray = $inputArray;
    }

    public function getValue($number) {
        $this->number = $number;
        $getArray = [];
        for ($i = 0; $i < $this->number; $i++) {
            $maxIndex = count($this->inputArray) - 1 - $i;
            $index = rand(0, $maxIndex);
            $getArray[$i] = $this->inputArray[$index];
            unset($this->inputArray[$index]);
            // 手動前移後續元素填補空洞
            for ($k = $index; $k < count($this->inputArray); $k++) {
                $this->inputArray[$k] = $this->inputArray[$k + 1];
            }
        }
        // asort($getArray); // 可選排序
        return $getArray;
    }
}

// 測試
$keywords = ["我們", "你們", "他們"];
$gv = new GetValues();
$gv->inputValue($keywords);
$key = $gv->getValue(1); // 隨機抽取 1 個
var_dump($key);
?>

替代方案(PHP 4.2+)

原生 array_rand($array, $num) 直接返回隨機鍵名陣列,更簡潔高效:

$keys = array_rand($keywords, 1); // 返回單個鍵或鍵陣列
$result = is_array($keys) ? array_intersect_key($keywords, array_flip($keys)) : [$keywords[$keys]];
copyright © 萬盛學電腦網 all rights reserved