2012-01-15 2 views
0

Как получить случайное значение из массива, установить значение в массиве, которое будет одним из выбранных больше, чем другим?Сделать случайное значение из массива, где наиболее выбранное значение будет

array('00','01','02'); 

Я хочу, чтобы выбрать случайное значение из этого массива с самым выбранным значением будет «00», то есть значение «00» будет отобрано 80%, а остальные два значения будет составлять 20%.

Здесь массив может иметь множество значений, его только пример с тремя значениями

+0

Вы можете использовать mt_rand, чтобы произвести случайное число между, скажем, 0 и 100, а затем, если ($ случайная <80) {$ yourarray [0], или что-то - может быть, выключатель заявление. Возможно, это сработает. Я не буду беспокоиться о публикации в качестве ответа. – stackuser10210

ответ

2
$main_array=array('00','01','02'); 

$priority=array(0,0,0,0,0,0,0,0,1,2); 

$rand_index=array_rand($priority);//select a random index from priority array.. $priority[$rand_index] will give you index 0 or 1 or 2 with your priority set.. 

echo $main_array[$priority[$rand_index]]; 

Я думаю, что код является сам объяснительный ...

массив будет иметь много элементов, дело будет приходите, когда скажем, что требование будет иметь вероятность 3% вероятности «00» 28%. отдыха «01» к другим элементам ... В этом случае используйте array_fill функцию для заполнения элементов в массах ... и array_merge их

подобно для того же случая я принял ответ будет

$main_array=array('00','01','02'); 
$priority1=array_fill(0,69,2); 
$priority2=array_fill(0,28,1); 
$priority3=array_fill(0,3,0);  
$priority=array_merge($priority1,$priority2,$priority3); 

$rand_index=array_rand($priority); 

echo $main_array[$priority[$rand_index]]; 
+0

Если массив имеет много элементов, то это сложно. –

+0

@jusnit Я обновил ответ для сложных распределений вероятностей. –

0

Используйте параллельный массив с распределением вероятностей, например:

array('80', '10', '10'); 

Используйте стандартную функцию случайных чисел для генерации числа от 0 до 99, а затем посмотреть его в этом массиве. Затем индекс, который вы его находите, используется как индекс для массива значений.

0

Вот идея.

$arr = array('00', '01', '02'); 
$randInt = rand(1, 10); 

if ($randInt <= 8) { 
    $value = $arr[0]; 
} 
else if ($randInt == 9) { 
    $value = $arr[1]; 
} 
else { // ($randInt == 10) 
    $value = $arr[2]; 
} 

Существует в настоящее время 80% вероятность того, что $value содержит '00', 10% шанс, что она содержит '01', и 10% шанс, что содержит '02'. Это может быть не самое эффективное решение, но оно будет работать.

0

один из многих вариантов

$a = array_fill(0, 8, '0'); 
$a['9']='1'; 
$a['10']='2'; 

echo $a[array_rand($a,1)]; 
Смежные вопросы