随机加权选择事件

ola*_*f36 2 php mysql random choice

可能重复:
在PHP中按权重生成随机结果?

我已经创建了一个数据库,其中我存储rss feeds.i的名称和链接已经使rss阅读器和一切都很好,直到现在.我想制作一个新闻滚动条,将显示feed的文章.但我想要为饲料提供一些重量值,以便每个饲料根据其对我的重要性进行选择,并在从数据库中选择饲料时自动选择其文章仅在卷轴中显示.有关如何做的任何想法那??? ???提前谢谢..

ps我的问题是如何从数据库中随机加权选择Feed,而不是如何显示feed的文章(我已完成此部分).

kan*_*der 6

有两种方法可以做到这一点,我可以从头脑中想到:

选项1:使用数据集中的键值填充新数组,其中权重确定项目重复的频率.然后,此数组中的比例与加权分布匹配.只需抓住使用$arr[array_rand($arr)].虽然简单易懂,但如果有很多物品,或者重量值非常高,这会在你的脸上爆炸.

$weighted = array();
foreach($items as $item) {
    array_merge($weighted, array_fill(0, $item['weight'], $item['value']);
}
$result = $weighted[array_rand($weighted)];
Run Code Online (Sandbox Code Playgroud)

选项2.对权重求和.选择0和权重之和的随机数.循环遍历数据集中的元素,与您选择的随机数进行比较.只要你点击一个等于或大于随机索引的那个,就选择那个元素.

function findRandomWeighted(array $input) {
   $weight = 0;
   // I'm assuming you can get the weight from MySQL as well, so this loop really should not be required. In that case $weight becomes a parameter.
   foreach($items as $item) {
      $weight += $item['weight'];
   }

   $index = rand(1, $weight);
   foreach($items as $item) {
      $index -= $item['weight'];
      if($index <= 0) { return $item['value'] }
   }

   return null;
}
Run Code Online (Sandbox Code Playgroud)

在下面的评论中我们的对话之后,这里是一个包含代码的Pastebin:

http://pastebin.com/bLbhThhj