现在有3个广告
adid rank
1 3
2 5
3 7
广告的编号唯一,分别是1,2,3 权重值是 rank字段
1号广告的权重为3
2号广告权重为5
3号广告权重7
依此类推。
现在要设计一种方法,能够根据权重值来分配广告展现的机会,权重值越高,广告展现的机会越多。
$randstr="122333444455555666666777777788888888999999999";
$randnum=mt_rand(0,44);//取随机值
$rannum=$randstr[$randnum];
给定一个字符串$randstr 该字符串长度为45,其中1出现1次,2出现2次,3出现3次,9出现9次。分别对应1-9的权重等级。
然后我们从0-44 中随机取一个数字
再从$randstr 中取对应这个数字的字符。
由于权重值越高,对应的数字越多,所以越容易被命中。
现在假设我们的广告都存放在 $adlist 数组中,其结构为:$adlist[adid]=>rank
然后我们用 array_keys($adlist,$rannum); 从adlist数组中查找rank值等于之前取出来的随机字符的key值.
然后我们就可以对这些key值的广告进行展示了。