Skip to content

abmmhasan/Game-Draw

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

18 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Lucky Draw

License: MIT

This class takes an example array (format is given in example file, will also explain below) and generates Item and Item count for winners.

Please don't use this to generate things/prizes with People's hard earned money. It is intended to make things fun with bonus gifts only.

Prerequisits

Language: PHP 7+

PHP Extension: BCMath (may need to install manually in Linux servers)

Installation

composer require abmmhasan/game-draw

Usage (Lucky Draw)

Input Data

[
    [
        'item' => 'product_000_NoLuck', // Item code or Identifier
        'chances' => '100000',          // Item Chances
        'amounts '=> [ 1 ]              // Item Amounts
    ],
    [
        'item' => 'product_001',
        'chances' => '1000',
        'amounts' => [ rand(1,100) ]    // Random Value passing
    ],
    [
        'item' => 'product_002',
        'chances' => '500.001',         // Fraction Allowed
        'amounts' => [
            1 => 100,                   // Amount chances
            5 => 50,                    // Format: Amount => Chances
            10 => 10.002,               // Fraction allowed
            rand(50,60) => 1,           // Random Value in Amount
        ]
    ],
    [
        'item' => 'product_003',
        'chances' => '100',
        'amounts' => [
            1 => 100,
            5 => 50,
            10 => 10,
            20 => 5, 
        ]
    ],
    [
        'item' => 'product_004',
        'chances' => '1',
        'amounts' => [ 10, 15, 30, 50 ] // Amounts without probability
    ],
]
  • item: Provide your item's unique identifier

  • chances: Weight of item.

    • It will be compared along all the items in array.
    • The higher the chances the greater the chances of getting the item.
    • Fraction number supported
    • In case of active inventory we can pass available item stock here
  • amounts: Array of Item amount. It can be any like following:

    • Single Value, i.e. [ 1 ] or random single value, i.e. [ 1-100 ]
    • Fraction number supported
    • Can be weighted amount, i.e.
      [
          5 => 100,
          15 => 50,
          50 => 10,
          80 => 5.001
      ]
    • We can also pass random single value, i.e. [ 50-100 ] in amount part using rand() or mt_rand().
      [
          1 => 100,
          5  => 50,
          10 => 10,
          rand(50,100) => 5
      ]
    • Or can be selective amount for random pick
      [ 10, 15, 30, 50, 90 ]

Output Data

product_000_NoLuck (1)                 // Item Code and Amount
list( $p, $c ) = (new LuckyDraw($prizes))->draw();
  • We will pass the Formatted Input i.e. $prizes
  • From above example, (after execution) $p will be the Item Code and $c will be the item count.

Inventory Solutions

Available stock should be passed (after subtracting used amount from stock amount) in chances properly.

Usage (Mega Draw)

Input Data

$prizes = 
[
    'product_001'=>50,        // Item Code/Identifier => Amount of the item
    'product_002'=>5,
    'product_003'=>3,
    'product_004'=>2,
    'product_005'=>1
];
  • item: Provide your item's unique identifier

  • amounts: Amount of gift. It must be a positive integer value.

To pass users where the Gifts are general:

$users = 
['user01','user02','user03',..........,'userNNNNNNN']; // user identity

Or where the gifts are specifc per user group

$users = 
[
    'user01'=>'product_002',        // user identity => Item Code/Identifier
    'user02'=>'product_003',
    'user03'=>'product_002',
    'user04'=>'product_001',
    .
    .
    'user NNNNNNN'=>'product_002'
];

Output Data

Array
(
    [product_001] => Array
        (
            [0] => usr47671
            [1] => usr57665
            [2] => usr92400
            [3] => usr7249
            [4] => usr37860
            [5] => usr57280
            [6] => usr97204
            [7] => usr82268
            [8] => usr16521
            [9] => usr24864
            [10] => usr52595
            [11] => usr39674
            [12] => usr52520
            [13] => usr42316
            [14] => usr41327
            [15] => usr41461
            [16] => usr74861
            [17] => usr40589
            [18] => usr79599
            [19] => usr86757
            [20] => usr92409
            [21] => usr51569
            [22] => usr37905
            [23] => usr43123
            [24] => usr98934
            [25] => usr56999
            [26] => usr26529
            [27] => usr37097
            [28] => usr8417
            [29] => usr65328
            [30] => usr11656
            [31] => usr56668
            [32] => usr87999
            [33] => usr83457
            [34] => usr39765
            [35] => usr31917
            [36] => usr22395
            [37] => usr27971
            [38] => usr89124
            [39] => usr42330
            [40] => usr30652
            [41] => usr19458
            [42] => usr96018
            [43] => usr32073
            [44] => usr55307
            [45] => usr23103
            [46] => usr37772
            [47] => usr64712
            [48] => usr39795
            [49] => usr3161
        )

    [product_002] => Array
        (
            [0] => usr50344
            [1] => usr60450
            [2] => usr62662
            [3] => usr26976
            [4] => usr56486
        )

    [product_003] => Array
        (
            [0] => usr92895
            [1] => usr37642
            [2] => usr85241
        )

    [product_004] => Array
        (
            [0] => usr84327
            [1] => usr22985
        )

    [product_005] => Array
        (
            [0] => usr26819
        )

)

To get Gift for General Case:

print_r((new Megadraw())->get($prizes,$users));

To get Gift for Grouped Case:

print_r((new Megadraw())->get($prizes,$users,true));
  • We will pass the Formatted Input i.e. $prizes
  • From the above example, (after execution) we will get Users won in each category.

Support

Having trouble? Create an issue!