Over a million developers have joined DZone.

ProbabilityRandom //PHP Class

·

Class to return items based on their probability.

Updated version can be found here

usage

$prExample = new ProbabilityRandom;

$prExample->add( 'I have more chances than everybody :]', 30 );
$prExample->add( 'I have good chances', 10 );
$prExample->add( 'I\'m difficult to appear...', 1 );

for( $x=10; $x--; print $prExample->get() . '
' );
//+ Jonas Raoni Soares Silva //@ http://jsfromhell.com class ProbabilityRandom { #private vars var $data = array(), $universe = 0; #add an item to the list and defines its probability of being chosen function add( $data, $probability ){ $this->data[ $x = sizeof( $this->data ) ] = new stdClass; $this->data[ $x ]->value = $data; $this->universe += $this->data[ $x ]->probability = abs( $probability ); } #remove an item from the list function remove( $index ){ if( $index > -1 && $index < sizeof( $this->data ) ) { $item = array_splice( $this->data, $index, 1 ); $this->universe -= $item->probability; } } #clears the class function clear(){ $this->universe = sizeof( $this->data = array() ); } #return a randomized item from the list function get(){ if( !$this->universe ) return null; $x = round( mt_rand( 0, $this->universe ) ); $max = $i = 0; do $max += $this->data[ $i++ ]->probability; while( $x > $max ); return $this->data[ $i-1 ]->value; } }
Topics:

The best of DZone straight to your inbox.

SEE AN EXAMPLE
Please provide a valid email address.

Thanks for subscribing!

Awesome! Check your inbox to verify your email so you can start receiving the latest in tech news and resources.
Subscribe

{{ parent.title || parent.header.title}}

{{ parent.tldr }}

{{ parent.urlSource.name }}