frank-houweling/weighted-random
Composer 安装命令:
composer require frank-houweling/weighted-random
包简介
Library for generating a weighted random sample
README 文档
README
This library is used to pick random values from a set of registered values, where values with a higher weight have a larger probability to be picked.
Installing
Install this library using composer.
composer require frank-houweling/weighted-random
Getting started
Using this library is simple. Initiate the WeightedRandomGenerator, register the possible values, and start generating random values!
<?php use FrankHouweling\WeightedRandom\WeightedRandomGenerator; // Initiate the generator $generator = new WeightedRandomGenerator(); // Register some value $generator->registerValue('foobar', 5); // And get a random value echo $generator->generate() . PHP_EOL;
Registering values
You can set one value with its weight using the following method. A higher weight means a higher probability that the value is generated by the random generator.
<?php use FrankHouweling\WeightedRandom\WeightedRandomGenerator; // Initiate the generator $generator = new WeightedRandomGenerator(); // Register a new value $generator->registerValue('foobar', 5); // Override the added value with a weight of 1 $generator->registerValue('foobar', 1); // The weight should be above 0, this call will result in an \InvalidArgumentException $generator->registerValue('foobar', 0);
You can register multiple values at once with the registerValues() method. This method only accepts strings an integers as values.
The registerValues() methods expects the value to be the key, and the weight to be the value of the passed array.
<?php use FrankHouweling\WeightedRandom\WeightedRandomGenerator; $generator = new WeightedRandomGenerator(); // Register multiple values $generator->registerValues([ 'foo' => 1, 'bar' => 2, ]); // Override the bar, foo will stay the same. $generator->registerValues([ 'bar' => 1, ]); // This will result in an InvalidArgumentException, 0 is not a correct weight. $generator->registerValues([ 'bar' => 0, ]);
You can remove a value from the generator with the removeValue method.
<?php use FrankHouweling\WeightedRandom\WeightedRandomGenerator; $generator = new WeightedRandomGenerator(); $generator->registerValue('foobar', 2); $generator->removeValue('foobar');
If you prefer, you can also use the WeightedValue valueobject. You should use the registerWeightedValue and removeWeightedValue methods to register and remove values with these value objects.
<?php use FrankHouweling\WeightedRandom\WeightedRandomGenerator; use FrankHouweling\WeightedRandom\WeightedValue; $generator = new WeightedRandomGenerator(); $weightedValue = new WeightedValue('foobar', 2); $generator->registerWeightedValue($weightedValue); $generator->removeWeightedValue($weightedValue);
Retrieving registered values
You can retrieve registered values and their weights from the generator. These are always returns as WeightedValue valueobjects.
<?php use FrankHouweling\WeightedRandom\WeightedRandomGenerator; $generator = new WeightedRandomGenerator(); $generator->registerValues([ 'foo' => 2, 'bar' => 3, ]); // Retrieve all registered values foreach ($generator->getWeightedValues() as $weightedValue) { echo sprintf( '%s => %s', $weightedValue->getValue(), $weightedValue->getWeight() ) . PHP_EOL; } // Or only one, by the given value. $weightedValue = $generator->getWeightedValue('foo'); echo $weightedValue->getWeight() . PHP_EOL;
Generating a random sample
To generate a random sample from the registered values, we use the generate method.
Generated values are not always unique. It is possible that calling the generate method twice will return in the same value twice.
<?php use FrankHouweling\WeightedRandom\WeightedRandomGenerator; $generator = new WeightedRandomGenerator(); $generator->registerValue('foo', 2); // Because we only registered one value, this now always returns `foobar` echo $generator->generate() . PHP_EOL; $generator->registerValue('bar', 2); // Because we have registered two values, both with a weight of 2, the chance of foo and bar is both 50%. echo $generator->generate() . PHP_EOL;
You can also generate a sample of multiple values using the generateMultiple method, and a set of multiple values without a possibility of duplicates with generateMultipleWithoutDuplicates.
<?php use FrankHouweling\WeightedRandom\WeightedRandomGenerator; $generator = new WeightedRandomGenerator(); $generator->registerValues([ 'foo' => 2, 'bar' => 2, ]); // Can return foo + bar, bar + foo, foo + foo or bar + bar. foreach ($generator->generateMultiple(2) as $value) { echo $value . PHP_EOL; } // Can return foo + bar or bar + foo foreach ($generator->generateMultipleWithoutDuplicates(2) as $value) { echo $value . PHP_EOL; } // This will return three values, of which 2 or 3 are duplicate. $generator->generateMultiple(3); // This will throw an \InvalidArgumentException, because it is not possible to generate three unique values. $generator->generateMultipleWithoutDuplicates(3);
frank-houweling/weighted-random 适用场景与选型建议
frank-houweling/weighted-random 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 2.29k 次下载、GitHub Stars 达 2, 最近一次更新时间为 2019 年 07 月 27 日, 在 PHP 生态内属于活跃度较高的组件。
它主要适用于以下技术方向: 「php」 「random」 「weighted」 「sampling」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。
我们在过去多个企业项目中使用过 frank-houweling/weighted-random 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 frank-houweling/weighted-random 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
与 frank-houweling/weighted-random 相关的其它包
同方向 / 同关键字的高下载量 PHP Composer 包推荐,方便对比选型:
Non-standard PHP library (NSPL) - functional primitives toolbox and more
Load balancer between nodes.
PHP implementation of the Weighted Slope One rating-based collaborative filtering scheme.
PHP implementation of the (Weighted Slopeone,Cosine, Weighted Cosine) rating-based collaborative filtering schemes.
Faker Japanese is a Faker provider that generates fake Japanese related data for you.
Gambling Algorithms for Certification.
统计信息
- 总下载量: 2.29k
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 3
- 点击次数: 28
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2019-07-27