Flexible Item Methods#
Method Names#
probability
elimination
weightedElimination
roundRobin
cumulative
batched
timeBased
weightedBatch
sequential
rangeWeighted
Method Requirements and Semantics#
- probability
Required item keys: name, weight
Weighted draw with replacement.
- elimination
Required item keys: name
Uniform draw without replacement.
- weightedElimination
Required item keys: name, weight
Weighted draw without replacement.
- roundRobin
Required item keys: name
Cycles through items in deterministic order.
- cumulative
Required item keys: name
Maintains cumulative scores and picks highest score each step.
- batched
Required item keys: name
Batch draw for count picks, replacement controlled by withReplacement.
- timeBased
Required item keys: name, weight, time
Applies urgency boost based on elapsed time since last pick.
Supported time values:
minute
hourly
daily
weekly
monthly
- weightedBatch
Required item keys: name, weight
Batch variant of weighted probability draw.
- sequential
Required item keys: name
Deterministic sequential traversal.
- rangeWeighted
Required item keys: name, min, max, weight
Chooses a range by weight then samples in that range.
Return type behavior:
integer result when both min and max are integers
float result otherwise
Examples#
Probability:
<?php
$result = $draw->execute([
'method' => 'probability',
'items' => [
['name' => 'item1', 'weight' => 0.2],
['name' => 'item2', 'weight' => 0.8],
],
'options' => ['count' => 3],
]);
Elimination:
<?php
$result = $draw->execute([
'method' => 'elimination',
'items' => [
['name' => 'item1'],
['name' => 'item2'],
['name' => 'item3'],
],
'options' => ['count' => 2],
]);
Weighted Elimination:
<?php
$result = $draw->execute([
'method' => 'weightedElimination',
'items' => [
['name' => 'item1', 'weight' => 10],
['name' => 'item2', 'weight' => 20],
],
'options' => ['count' => 2],
]);
Round Robin:
<?php
$result = $draw->execute([
'method' => 'roundRobin',
'items' => [
['name' => 'item1'],
['name' => 'item2'],
],
'options' => ['count' => 4],
]);
Cumulative:
<?php
$result = $draw->execute([
'method' => 'cumulative',
'items' => [
['name' => 'item1'],
['name' => 'item2'],
],
'options' => ['count' => 3],
]);
Batched (without replacement):
<?php
$result = $draw->execute([
'method' => 'batched',
'items' => [
['name' => 'item1'],
['name' => 'item2'],
['name' => 'item3'],
],
'options' => ['count' => 2, 'withReplacement' => false],
]);
Time Based:
<?php
$result = $draw->execute([
'method' => 'timeBased',
'items' => [
['name' => 'item1', 'weight' => 10, 'time' => 'daily'],
['name' => 'item2', 'weight' => 20, 'time' => 'weekly'],
],
'options' => ['count' => 2],
]);
Weighted Batch:
<?php
$result = $draw->execute([
'method' => 'weightedBatch',
'items' => [
['name' => 'item1', 'weight' => 10],
['name' => 'item2', 'weight' => 20],
],
'options' => ['count' => 3],
]);
Sequential:
<?php
$result = $draw->execute([
'method' => 'sequential',
'items' => [
['name' => 'item1'],
['name' => 'item2'],
],
'options' => ['count' => 3],
]);
Range Weighted:
<?php
$result = $draw->execute([
'method' => 'rangeWeighted',
'items' => [
['name' => 'item1', 'min' => 1, 'max' => 50, 'weight' => 10],
['name' => 'item2', 'min' => 5, 'max' => 25, 'weight' => 15],
],
'options' => ['count' => 2],
]);