Skip to content

Instantly share code, notes, and snippets.

@irazasyed
Created January 8, 2016 09:21
Show Gist options
  • Save irazasyed/f41f8688a2b3b8f7b6df to your computer and use it in GitHub Desktop.
Save irazasyed/f41f8688a2b3b8f7b6df to your computer and use it in GitHub Desktop.

Revisions

  1. irazasyed created this gist Jan 8, 2016.
    23 changes: 23 additions & 0 deletions weight-utility.php
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,23 @@
    <?php
    /**
    * getRandomWeightedElement()
    * Utility function for getting random values with weighting.
    * Pass in an associative array, such as array('A'=>5, 'B'=>45, 'C'=>50)
    * An array like this means that "A" has a 5% chance of being selected, "B" 45%, and "C" 50%.
    * The return value is the array key, A, B, or C in this case. Note that the values assigned
    * do not have to be percentages. The values are simply relative to each other. If one value
    * weight was 2, and the other weight of 1, the value with the weight of 2 has about a 66%
    * chance of being selected. Also note that weights should be integers.
    *
    * @param array $weightedValues
    */
    function getRandomWeightedElement(array $weightedValues) {
    $rand = mt_rand(1, (int) array_sum($weightedValues));

    foreach ($weightedValues as $key => $value) {
    $rand -= $value;
    if ($rand <= 0) {
    return $key;
    }
    }
    }