php 簡單計算權重的方法(適合抽獎類的應用)

來源:互聯網
上載者:User

最近因項目需求需要做一個抽獎類的應用,使用者點擊抽獎,會返回三種不同的結果(即獎項:一等獎,二等獎,三等獎,謝謝抽獎),很顯然,這個獎值出現的機率要依次降低了。這就涉及到了一個類似權重計算的一個演算法了。根據需求想了很久,也總算是通過一個簡單的權重計算辦法將這件事情搞定了,機率還是在預計範圍之內的。

下面就將這個權重計算的方法概述下。

首先說明的是這個例子在這裡僅適合二維數組且一維為數字索引的數組,資料數組結構如下:

$data=array(0=>array('id'=>1,'name'=>'一等獎','weight'=>'5'),1=>array('id'=>2,'name'=>'二等獎','weight'=>'10'),2=>array('id'=>3,'name'=>'三等獎','weight'=>'25'),3=>array('id'=>4,'name'=>'謝謝抽獎','weight'=>'60'));

下面是簡單計算權重的演算法

// 權重數值越高,被返回的機率越大// author www.Alixixi.comfunction countWeight($data){$weight=0;$temp=array();foreach($data as $v){$weight+=$v['weight'];for($i=0;$i<$v['weight'];$i++){$temp[]=$v;//放大數組}}$int=mt_rand(0,$weight-1);//擷取一個隨機數$result=$temp[$int];return $result;}

計算結果返回如下:

Array
(
    [id] => 4
    [name] => 謝謝抽獎
    [weight] => 60
)



相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.