abmmhasan/game-draw

为获胜者生成物品和物品数量。

2.01.1 2023-12-07 04:25 UTC

This package is auto-updated.

Last update: 2024-09-07 06:02:26 UTC


README

Codacy Badge Libraries.io dependency status for GitHub repo Packagist Downloads License: MIT Packagist Version Packagist PHP Version Support GitHub code size in bytes

游戏抽奖库提供了基于用户输入和选择的方法的两种不同的获胜者选择方式。

请勿将此用于生成用人们辛勤赚来的钱的东西/奖品。它的目的是用额外的礼物使事情变得有趣。

先决条件

语言:PHP 8/+

PHP 扩展:BCMath(可能需要手动安装)

安装

composer require abmmhasan/game-draw

用法(幸运抽奖)

输入数据

$products = [
    [
        'item' => 'product_000_NoLuck', // Item code or Identifier
        'chances' => '100000',          // Item Chances
        'amounts'=> [ 1 ]              // Item Amounts
    ],
    [
        'item' => 'product_001',
        'chances' => '1000',
        'amounts' => '1.5,10.00001,1'    // Weighted CSV formatted range (min,max,bias)
    ],
    [
        'item' => 'product_002',
        'chances' => '500.001',         // Fraction Allowed
        'amounts' => [
            1 => 100,                   // Amount chances
            5 => 50,                    // Format: Amount => Chances
            10 => 10.002,               // Fraction allowed
        ]
    ],
    [
        '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:提供您的物品的唯一标识符

  • chances:物品的权重(浮点数/整数)。

    • 它将与数组中的所有物品进行比较。
    • 权重越高,获得物品的机会就越大。
    • 在活动库存的情况下,您可以在此处传递可用的物品库存
  • amounts:物品数量的字符串或数组(浮点数/整数)。可以是任何类似

    • (数组)单个正数值,例如 [ 1 ] 或多个正数值(随机选择),例如 [ 1, 2, 3, 5]
    • (数组)加权金额,例如
      [
          5 => 100,
          15 => 50,
          50 => 10,
          80 => 5.001
      ]
    • (字符串)加权 CSV 格式化的范围(min,max,bias) '1,10.00001,0.001'
      • CSV 格式只允许 3 个成员 min,max,bias
      • 最大值应大于或等于最小值,偏置应大于 0
      • 偏置越高,选择最低金额的机会就越大

输出数据

$luckyDraw = new AbmmHasan\Draw\LuckyDraw($products);
$luckyDraw->pick()

将输出类似以下的数据

[
    'item' => 'product_000_NoLuck', // The item name
    'amount' => 1 // the selected amount
]

库存解决方案

应传递可用的库存量(从库存金额中减去已使用的数量)在权重中正确

用法(大奖抽奖)

输入数据

$prizes = 
[
    'product_001'=>50,        // Item Code/Identifier => Amount of the item
    'product_002'=>5,
    'product_003'=>3,
    'product_004'=>2,
    'product_005'=>1
];
  • item:提供您的物品的唯一标识符

  • amounts:礼物金额。它必须是一个正整数值。

要传递用户,您必须创建一个至少包含 1 列的 CSV 文件。第一列将指示用户身份。

"usr47671",
"usr57665",
"usr47671",.....

输出数据

$bucket = new GrandDraw();

// set resources
$bucket->setItems([ // set prizes
    'product_001' => 10,        // Item Code/Identifier => Amount of the item
    'product_002' => 5,
    'product_003' => 3,
    'product_004' => 2,
    'product_005' => 1
])->setUserListFilePath('./Sample1000.csv'); // set the CSV file location

// get the winners
$bucket->getWinners()

将提供类似以下输出

Array
(
    [product_001] => Array
        (
            [0] => usr47671
            [1] => usr57665
            [2] => usr92400
            [3] => usr7249
            [4] => usr37860
            [5] => usr57280
            [6] => usr97204
            [7] => usr82268
            [8] => usr16521
            [9] => usr24864
        )

    [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
        )

)

支持

遇到麻烦?创建一个问题!