如何根据PHP中选定的百分比返回部分数组?

时间:2013-09-12 19:02:30

标签: php

我要做的是获取一个名单列表(来自输入),比方说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 个答案:

答案 0 :(得分: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));    
}

<强> 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 ...