看完你就會的php抽獎小案例 還在等什么?

<?php

    // 準(zhǔn)備獎品
    // weight代表獎品權(quán)重  權(quán)重越大被抽到的可能性也就越大
    // 可以在后臺進行設(shè)置
    // 如果不希望該獎品被抽到  權(quán)重可以給設(shè)置成0
    $rewardOptions = array(
        array('id' => 1, 'name' => '橙武', 'weight' => 1), 
        array('id' => 2, 'name' => '紫武', 'weight' => 1), 
        array('id' => 3, 'name' => '藍武', 'weight' => 1), 
        array('id' => 4, 'name' => '綠武', 'weight' => 1), 
        array('id' => 5, 'name' => '白武', 'weight' => 1), 
    );

    // 獲取抽到的獎品ID
    $rewardId = getRewardId($rewardOptions);
    // 得到獎品ID  進行相關(guān)業(yè)務(wù)操作
    // .....
    // 展示對應(yīng)的獎品
    echo $rewardOptions[$rewardId - 1]['name'];


    /**
     * [getRewardId 抽獎方法(必定能抽中獎品)]
     * 這個算法的核心點就在于看獲得的隨機數(shù)是否落在某個權(quán)重范圍區(qū)間
     * 如果是則直接可以取出該獎品
     * 如果不是則將總權(quán)重中去除本次循環(huán)的權(quán)重
     * 總權(quán)重一次一次減小  最后一個總權(quán)重  必定等于最后一次循環(huán)的獎品權(quán)重
     * 所以獲得的隨機數(shù)必定也在這個范圍內(nèi) 獎品必然會獲得
     * @param  [type] $arr [獎品數(shù)組]
     * @param  [type] $start [起始權(quán)重 可用來做貓膩 
     * 如果只想讓廉價的獎品被抽中 可以將該值設(shè)置為廉價商品的權(quán)重值]
     * @return [type] $id  [抽到的獎品]
     */
    function getRewardId($arr, $start = 1) {
        // 計算總權(quán)重
        $totalWeight = array_sum(array_column($arr, 'weight'));
        
        foreach($arr as $k => $v) {
            // 獲取一個總權(quán)重內(nèi)的隨機數(shù)
            $random = mt_rand($start, $totalWeight);
            if($random <= $v['weight']) {
                return $v['id'];
            } else {
                $totalWeight -= $v['weight'];
            }
        }
    }

代碼果然需要理解記憶 死記硬背是永遠消化不了的!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容