我要做的是获取一个名单列表(来自输入),比方说100,将它们随机播放,然后根据数组的某个百分比(n)返回随机选择。
例如,如果数组有100个元素(名称),则返回5%,这是来自混洗数组的5个随机名称。我已经尝试使用谷歌搜索解决方案,但找不到太多,我不知所措,不能过去只返回一个洗牌阵列。
(节选)
if(isset($_POST['submit']) === true) {
$names = $_POST['ShuffleNames'];
$namesArray = explode("\n", $names);
shuffle($namesArray);
//display each name on new line
foreach($namesArray as $name) {
echo "<li>". $name . "</li>";
}
}
答案 0 :(得分:4)
您可以按照以下方式执行此操作:
count()
array_slice()
切割数组并返回结果作为一项功能:
function array_percentage($array, $percentage)
{
shuffle($array);
$count = count($array);
$result = array_slice($array, 0, ceil($count*$percentage/100));
return $result;
}
您可以像以下一样使用它:
if(isset($_POST['submit'])) {
$names = $_POST['ShuffleNames'];
$namesArray = explode("\n", $names);
print_r(array_percentage($namesArray, 5));
}
<强> Demo! 强>
答案 1 :(得分:1)
几乎在那里,而不是foreach:
$max = 5;
for ($i=0;$i<$max;++$i) {
echo "<li>".array_pop($namesArray). "</li>";
}
您可以将$ max设置为您想要的百分比
答案 2 :(得分:1)
if(isset($_POST['submit']) === true) {
$x = 5; //Set the percentage
$names = $_POST['ShuffleNames'];
$namesArray = explode("\n", $names);
$total = count($namesArray); //Get the total amount of elements (the 100%)
shuffle($namesArray);
//display each name on new line
for($i = 1; $i <= ($total/100)*$x; $i++) { //loop and output
echo "<li>". $namesArray[$i] . "</li>";
}
}
答案 3 :(得分:0)
使用此:http://www.php.net/manual/en/function.str-shuffle.php
$names = $_POST['ShuffleNames'];
$namesArray = explode("\n", $names);
$names_Array = **str_shuffle**($namesArray);
// .. code ...