我已经建立了一个数据库,其中我存储了rss feeds.i的名称和链接,使得rss阅读器和一切都还可以。我想创建一个新闻滚动条,显示提要的文章。但我想给饲料一些重量值,以便每个饲料根据其对我的重要性进行选择,并自动从数据库中选择饲料时,其文章仅在滚动条中显示。任何想法如何我可以这样做吗???先谢谢..
P.S。我的问题是我怎样才能进行atotomatically随机加权选择 数据库而不是如何显示提要的文章(我已完成此部分)。
答案 0 :(得分: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)];
选项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;
}
在下面的评论中我们的对话之后,这里是一个包含代码的Pastebin:
答案 1 :(得分:0)
你可以找到实现和描述的快速算法 - weighted random(在javascript中,但我认为可以在几分钟内重写为PHP)。它比循环通过阵列快得多。