diff options
author | Luke Shumaker <lukeshu@sbcglobal.net> | 2016-05-01 15:12:12 -0400 |
---|---|---|
committer | Luke Shumaker <lukeshu@sbcglobal.net> | 2016-05-01 15:12:12 -0400 |
commit | c9aa36da061816dee256a979c2ff8d2ee41824d9 (patch) | |
tree | 29f7002b80ee984b488bd047dbbd80b36bf892e9 /includes/ArrayUtils.php | |
parent | b4274e0e33eafb5e9ead9d949ebf031a9fb8363b (diff) | |
parent | d1ba966140d7a60cd5ae4e8667ceb27c1a138592 (diff) |
Merge branch 'archwiki'
# Conflicts:
# skins/ArchLinux.php
# skins/ArchLinux/archlogo.gif
Diffstat (limited to 'includes/ArrayUtils.php')
-rw-r--r-- | includes/ArrayUtils.php | 69 |
1 files changed, 0 insertions, 69 deletions
diff --git a/includes/ArrayUtils.php b/includes/ArrayUtils.php deleted file mode 100644 index 985271f7..00000000 --- a/includes/ArrayUtils.php +++ /dev/null @@ -1,69 +0,0 @@ -<?php - -class ArrayUtils { - /** - * Sort the given array in a pseudo-random order which depends only on the - * given key and each element value. This is typically used for load - * balancing between servers each with a local cache. - * - * Keys are preserved. The input array is modified in place. - * - * Note: Benchmarking on PHP 5.3 and 5.4 indicates that for small - * strings, md5() is only 10% slower than hash('joaat',...) etc., - * since the function call overhead dominates. So there's not much - * justification for breaking compatibility with installations - * compiled with ./configure --disable-hash. - * - * @param $array The array to sort - * @param $key The string key - * @param $separator A separator used to delimit the array elements and the - * key. This can be chosen to provide backwards compatibility with - * various consistent hash implementations that existed before this - * function was introduced. - */ - public static function consistentHashSort( &$array, $key, $separator = "\000" ) { - $hashes = array(); - foreach ( $array as $elt ) { - $hashes[$elt] = md5( $elt . $separator . $key ); - } - uasort( $array, function ( $a, $b ) use ( $hashes ) { - return strcmp( $hashes[$a], $hashes[$b] ); - } ); - } - - /** - * Given an array of non-normalised probabilities, this function will select - * an element and return the appropriate key - * - * @param $weights array - * - * @return bool|int|string - */ - public static function pickRandom( $weights ) { - if ( !is_array( $weights ) || count( $weights ) == 0 ) { - return false; - } - - $sum = array_sum( $weights ); - if ( $sum == 0 ) { - # No loads on any of them - # In previous versions, this triggered an unweighted random selection, - # but this feature has been removed as of April 2006 to allow for strict - # separation of query groups. - return false; - } - $max = mt_getrandmax(); - $rand = mt_rand( 0, $max ) / $max * $sum; - - $sum = 0; - foreach ( $weights as $i => $w ) { - $sum += $w; - # Do not return keys if they have 0 weight. - # Note that the "all 0 weight" case is handed above - if ( $w > 0 && $sum >= $rand ) { - break; - } - } - return $i; - } -} |