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


How can I return part of array based on selected percentage in 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>";
    }
}

您可以按如下方式执行此操作:

  • 接受用户输入 -- 数组和百分比
  • 使用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));    
}

演示!

几乎在那里,但不是foreach:

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

您可以将$max设置为所需的百分比

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>";
    }
}

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

$names = $_POST['ShuffleNames'];
    $namesArray = explode("'n", $names);
    $names_Array = **str_shuffle**($namesArray);
    // .. code ...