首先,你提一个清单 ; 这直接转换为数组.其次,你有一个有限数量的选项,在数组中显示,你想随机选择一个.这转换为随机选择索引(整数).由于数组从0开始并且您无法选择通过最后一个索引的项目,因此您需要选择介于0和数组长度之间的随机范围.
如果你只是想通过按下按钮从列表中获取一个随机项,你肯定想把它隔离到前端,即javascript:
var randomWords = [
'Apple',
'Banana',
'Pear'
];
function getRandomWordFromList(list) {
var index = getRandomInt(0,list.length);
return randomWords[index];
}
function getRandomInt(min,max) {
return Math.floor(Math.random() * (max - min + 1)) + min;
}
document.getElementById('myButton').onclick = function() { // for example's sake...
document.getElementById('theOutput').innerHTML = getRandomWordFromList(randomWords);
};
Run Code Online (Sandbox Code Playgroud)
(getRandomInt来自JavaScript在特定范围内生成随机整数?)
此外,如果你的数组是碎片(即缺少一些索引),你可以使用(更安全,虽然更复杂):
function arrayKeys(array) {
var i,keys = [];
for ( i in array ) {
if ( isInt(i) && array.hasOwnProperty(i) ) {
keys.push(i);
}
}
return keys;
}
function isInt(value) {
return !isNaN(parseInt(value,10)) && (parseFloat(value,10) == parseInt(value,10));
}
function getRandomInt(min,max) {
return Math.floor(Math.random() * (max - min + 1)) + min;
}
function getRandomWordFromList(list) {
var keys = arrayKeys(list); // be sure to only get indices that exist
var key = getRandomInt(0,keys.length-1);
return list[keys[key]];
}
var randomWords = [
'Apple',
'Banana',
'Pear'
];
delete randomWords[1]; // remove 'Banana'
var theWord = getRandomWordFromList(randomWords);
Run Code Online (Sandbox Code Playgroud)
如果服务器端存在影响随机列表的内容,可以通过PHP填充randomWords数组,如下所示:
<?php
$randomWords = array(
'Apple',
'Banana',
'Pear'
);
?>
<script type="text/javascript">
var randomWords = [<?php echo "'".implode("','",$randomWords)."'"; ?>];
// don't forget your getRandomWord functions
</script>
Run Code Online (Sandbox Code Playgroud)
奖励:如果随机化必须完全发生在服务器端,即php,这里是一个翻译:
<?php
$randomWords = array(
'Apple',
'Banana',
'Pear'
);
echo $randomWords[array_rand($randomWords)]; // output somewhere
?>
Run Code Online (Sandbox Code Playgroud)