Moved wfPickRandom to ArrayUtils.
Change-Id: I45e21e722245901ab2988be4892cdb393169c62c
This commit is contained in:
parent
cba073e339
commit
9ace77f03c
3 changed files with 37 additions and 37 deletions
|
|
@ -21,7 +21,7 @@ class ArrayUtils {
|
|||
* various consistent hash implementations that existed before this
|
||||
* function was introduced.
|
||||
*/
|
||||
static function consistentHashSort( &$array, $key, $separator = "\000" ) {
|
||||
public static function consistentHashSort( &$array, $key, $separator = "\000" ) {
|
||||
$hashes = array();
|
||||
foreach ( $array as $elt ) {
|
||||
$hashes[$elt] = md5( $elt . $separator . $key );
|
||||
|
|
@ -30,4 +30,38 @@ class ArrayUtils {
|
|||
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;
|
||||
if ( $sum >= $rand ) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
return $i;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -329,40 +329,6 @@ function wfRandomString( $length = 32 ) {
|
|||
return substr( $str, 0, $length );
|
||||
}
|
||||
|
||||
/**
|
||||
* 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
|
||||
*/
|
||||
function wfPickRandom( $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;
|
||||
if ( $sum >= $rand ) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
return $i;
|
||||
}
|
||||
|
||||
/**
|
||||
* We want some things to be included as literal characters in our title URLs
|
||||
* for prettiness, which urlencode encodes by default. According to RFC 1738,
|
||||
|
|
|
|||
|
|
@ -117,14 +117,14 @@ class LoadBalancer {
|
|||
* Given an array of non-normalised probabilities, this function will select
|
||||
* an element and return the appropriate key
|
||||
*
|
||||
* @deprecated 1.21, use wfPickRandom()
|
||||
* @deprecated 1.21, use ArrayUtils::pickRandom()
|
||||
*
|
||||
* @param $weights array
|
||||
*
|
||||
* @return bool|int|string
|
||||
*/
|
||||
function pickRandom( $weights ) {
|
||||
return wfPickRandom( $weights );
|
||||
return ArrayUtils::pickRandom( $weights );
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
Loading…
Reference in a new issue