# weightRandom **Repository Path**: wilson52cc/weight-random ## Basic Information - **Project Name**: weightRandom - **Description**: 这个加权随机取值应该是全球速度最快的了吧.嘿嘿嘿 - **Primary Language**: PHP - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 3 - **Created**: 2022-03-30 - **Last Updated**: 2022-03-30 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## 加权随机抽取算法 ### 适用于带权重的抽取.例如红包,抽奖等. ### 本地测试结果.执行十万次需要速度为28毫秒.代码在test.php下 ![测试结果](./testres.png) ### 代码实例 #### 常规用法 ```php // 第一步 实例化对象 $obj = new WeightRandom(); // 第二步 加载数据, key标识名称,val标识权重 $data = [ '子鼠' => 1, '丑牛' => 2, '寅虎' => 3, '卯兔' => 10, '辰龙' => 20, '巳蛇' => 500, '午马' => 1000 ]; $obj->load($data); // 第三步计算 别名列表 $obj->initAliases(); // 第四步 获取随机数据.此步骤可重复执行. $key = $obj->getRandom(); ``` #### 基于缓存的别名列表,cache方法为伪方法.需要自己实现 ```php // 第一步 实例化对象 $obj = new WeightRandom(); // 第二步 加载数据, key标识名称,val标识权重 $data = [ '子鼠' => 1, '丑牛' => 2, '寅虎' => 3, '卯兔' => 10, '辰龙' => 20, '巳蛇' => 500, '午马' => 1000 ]; $obj->load($data); // 第三步处理 别名列表 $cacheKey = 'a'; $aliases = []; $aliases = cache($cacheKey); if(!$aliases) { $aliases = $obj->initAliases()->getAliases(); cache($cacheKey, $aliases); } $obj->setAliases($aliases); // 第四步 获取随机数据.此步骤可重复执行. $keyRand = []; $keyRand[] = $obj->getRandom(); $keyRand[] = $obj->getRandom(); $keyRand[] = $obj->getRandom(); var_dump($keyRand); ```