2

我要做的是获取一个名称列表(来自输入),比如说 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>";
    }

}
4

4 回答 4

4

你可以这样做:

  • 接受用户输入——数组和百分比
  • 使用计算数组元素的数量count()
  • 计算百分比:(计数/百分比)* 100
  • 使用切片数组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));    
}

演示!

于 2013-09-12T19:19:08.557 回答
1

几乎在那里,但不是 foreach:

$max = 5;
for ($i=0;$i<$max;++$i) {
 echo "<li>".array_pop($namesArray). "</li>";
}

您可以将 $max 设置为您想要的百分比

于 2013-09-12T19:06:36.160 回答
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>";
    }

}
于 2013-09-12T19:07:05.130 回答
0

使用这个:http ://www.php.net/manual/en/function.str-shuffle.php

$names = $_POST['ShuffleNames'];
    $namesArray = explode("\n", $names);
    $names_Array = **str_shuffle**($namesArray);
    // .. code ...
于 2013-09-12T19:07:00.593 回答