PHP权重算法-用于游戏根据权限来随机物品
生活随笔
收集整理的這篇文章主要介紹了
PHP权重算法-用于游戏根据权限来随机物品
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
假設有數據:
?
$data?=?array(array(‘id’?=>?1,?‘name’?=>?‘張三’,?‘weight’?=>?5),
array(‘id’?=>?2,?‘name’?=>?‘王五’,?‘weight’?=>?10),
array(‘id’?=>?3,?‘name’?=>?‘李四’,?‘weight’?=>?15),
);
?
要隨機取出其中一條,并且不是完全隨機,而是根據其中weight的數值,按照數值越大,幾率越高的規律取出。
以前寫過一些權重算法,可是都不完美,要么數據量有限制,要么weight之和必須等于一個指定的數等等,都不完善。
今天突發奇想,寫了一套完美的權重算法,該算法有如下優勢:
1.支持無限多個數據
2.weight值之和任意
3.不存在兩個weight值一樣時無法平均分配的bug
算法如下:
?2?$tempdata?=?array();
?3?foreach?($data?as?$one)?{
?4?
?5?$weight?+=?$one['weight'];
?6?
?7?for?($i?=?0;?$i?<?$one['weight'];?$i?++)?{
?8?$tempdata[]?=?$one;
?9?
10?}
11?
12?}
13?$use?=?rand(0,?$weight?–?1);
14?$one?=?$tempdata[$use];
15?
?
?
最終得到的$one,就是源數據數組中按照權重分配,隨機得到的數據。
總結
以上是生活随笔為你收集整理的PHP权重算法-用于游戏根据权限来随机物品的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux环境进程间通信 信号量
- 下一篇: 加权重随机算法