【发布时间】:2014-10-30 21:40:51
【问题描述】:
所以我有一份爱尔兰前 100 名男孩名字的列表:
这是我的 PHP:
<?php
$top100irishNames = <<<END
Jack
James
Daniel
Sean
Conor
Adam
Harry
Ryan
Dylan
Michael
Luke
Charlie
Liam
Oisin
Cian
Jamie
Thomas
Alex
Noah
Darragh
Patrick
Aaron
Cillian
Matthew
John
Nathan
David
Fionn
Evan
Ethan
Jake
Kyle
Rian
Ben
Max
Eoin
Tadhg
Finn
Callum
Samuel
Joshua
Rory
Jayden
Joseph
Tyler
Sam
Shane
Mark
Robert
Aidan
William
Ronan
Eoghan
Alexander
Leon
Cathal
Mason
Tom
Oliver
Andrew
Oscar
Ciaran
Bobby
Jacob
Senan
Rhys
Scott
Benjamin
Cormac
Kevin
Lucas
Alan
Donnacha
Jakub
Christopher
Filip
Killian
Josh
Alfie
Tommy
Ruairi
Odhran
Oran
Leo
Isaac
Dara
Jason
Zach
Martin
Peter
Brian
Danny
Niall
Tomas
Edward
Stephen
Logan
Kacper
Anthony
Billy
END;
$top100irishNames_arr=preg_split("/\n/",$top100irishNames);
for($i=0;$i<25;$i++){
echo getRandomWeightedElement($top100irishNames_arr)."\n";
}
function getRandomWeightedElement($arr) {
$rand = mt_rand(1, (int) sizeof($arr));
for ($i=0;$i<sizeof($arr);$i++) {
$rand -= $i;
if ($rand <= 0) {
return $arr[$i];
}
}
}
?>
Jack、James、Daniel、Sean等应该输出很多...
但这里有一些随机输出:
Ryan
Cian
Luke
Charlie
Harry
Luke
Harry
Charlie
Oisin
Ryan
Luke
Luke
Michael
Liam
Liam
Adam
Ryan
Oisin
Conor
Oisin
Liam
Oisin
Daniel
Adam
Oisin
我没有看到任何 Jack/James/等?
我试图让采样器最常输出数组开头的名称,而最不常输出数组末尾的名称。
【问题讨论】:
-
如果你输出
$rand(在它每次修改之前)并停止猜测怎么办?