当前位置:首页 > PHP教程 > php应用 > 列表

PHP实现的权重算法示例【可用于游戏根据权限来随机物品】

发布:smiling 来源: PHP粉丝网  添加日期:2021-11-08 12:08:04 浏览: 评论:0 

这篇文章主要介绍了PHP实现的权重算法,可用于游戏根据权限来随机物品,涉及php数组遍历、随机数处理及数值运算相关操作技巧,需要的朋友可以参考下。

本文实例讲述了PHP实现的权重算法,分享给大家供大家参考,具体如下:

假设有数据:

  1. $data = array ( 
  2.  array ( 
  3.  'id' => 1, 
  4.  'name' => '张三'
  5.  'weight' => 5 
  6.  ), 
  7.  array ( 
  8.  'id' => 2, 
  9.  'name' => '王五'
  10.  'weight' => 10 
  11.  ), 
  12.  array ( 
  13.  'id' => 3, 
  14.  'name' => '李四'
  15.  'weight' => 15 
  16.  ), 
  17. ); 

要随机取出其中一条,并且不是完全随机,而是根据其中weight的数值,按照数值越大,几率越高的规律取出。

以前写过一些权重算法,可是都不完美,要么数据量有限制,要么weight之和必须等于一个指定的数等等,都不完善。

今天突发奇想,写了一套完美的权重算法,该算法有如下优势:

1. 支持无限多个数据

2. weight值之和任意

3. 不存在两个weight值一样时无法平均分配的bug

算法如下:

  1. $data = array ( 
  2.  array ( 
  3.  'id' => 1, 
  4.  'name' => '张三'
  5.  'weight' => 5 
  6.  ), 
  7.  array ( 
  8.  'id' => 2, 
  9.  'name' => '王五'
  10.  'weight' => 10 
  11.  ), 
  12.  array ( 
  13.  'id' => 3, 
  14.  'name' => '李四'
  15.  'weight' => 15 
  16.  ), 
  17. ); 
  18. $weight = 0; 
  19. $tempdata = array (); 
  20. foreach ($data as $one) { 
  21.  $weight += $one['weight']; 
  22.  for ($i = 0; $i < $one['weight']; $i++) { 
  23.  $tempdata[] = $one
  24.  } 
  25. $use = rand(0, $weight -1); 
  26. $one = $tempdata[$use]; 
  27. var_dump($one); 

运行结果:

  1. array(3) { 
  2.   ["id"]=> 
  3.   int(2) 
  4.   ["name"]=> 
  5.   string(4) "王五" 
  6.   ["weight"]=> 
  7.   int(10) 
  8. }

Tags: PHP权重算法 PHP随机物品

分享到: