本文实例讲述了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
算法如下:
$data = array ( array ( "id" => 1, "name" => "张三", "weight" => 5 ), array ( "id" => 2, "name" => "王五", "weight" => 10 ), array ( "id" => 3, "name" => "李四", "weight" => 15 ),);$weight = 0;$tempdata = array ();foreach ($data as $one) { $weight += $one["weight"]; for ($i = 0; $i < $one["weight"]; $i++) { $tempdata[] = $one; }}$use = rand(0, $weight -1);$one = $tempdata[$use];var_dump($one);
运行结果:
array(3) { ["id"]=> int(2) ["name"]=> string(4) "王五" ["weight"]=> int(10)}
更多关于PHP相关内容感兴趣的读者可查看本站专题:《PHP数据结构与算法教程》、《php程序设计算法总结》、《php字符串(string)用法总结》、《PHP数组(Array)操作技巧大全》、《PHP常用遍历算法与技巧总结》及《PHP数学运算技巧总结》
希望本文所述对大家PHP程序设计有所帮助。