【问题标题】:randomly subtract desired percentage from a array using php使用php从数组中随机减去所需的百分比
【发布时间】:2016-06-29 15:27:24
【问题描述】:

我有一个array,其中包含40 这样的元素

$i = array('1','2','3','4','5','6','7','8','9','10','11',
'12','13','14','15','16','17','18','19','20','21','22','23','24',
'25','26','27','28','29','30','31','32','33','34','35',
'36','37','38','39','40');

现在我有 4 变体,例如 5%, 10%, 15%, 20%

要求是我需要在减去所需的variation后随机取array values

假设我使用了5% 变体,所以我需要将5% 从数组中分离出来,即2 元素我需要从数组中随机删除,并将其余的38 元素随机保留在新的array 中.so 结果 array 以及减去的元素都需要在两个不同的 array 中。

我需要一个带有两个参数的函数,即一个是variation,另一个是array,即结果array或减去元素array

所有其他变体都遵循相同的顺序。

【问题讨论】:

  • 有什么问题?
  • jon 我需要 php 中的函数,它可以返回我想要的值,即想要的数组 .. 你读对了吗
  • 亲爱的 OP。你写了你需要的东西,而不是你尝试过的东西和你卡在哪里。这不是您编写所需内容的编码服务,我们只会为您编写代码。
  • @sAnS 我确实读过它。正如 Magnus 所指出的,这是一组要求,而不是一个问题。我们不会为你做你的工作。
  • Magnus 我在 SO 中帮助的不仅仅是编码服务。我不觉得我在做编码服务。我坚持使用更大的原型,这只是一瞥

标签: php arrays random


【解决方案1】:

虽然我不确定您所说的 在一个新数组中随机放置 38 个元素是什么意思,例如这是否意味着新数组也被洗牌了?这就是我想出的。

<?php

function splitArray($variation, $array) {

    $count = count($array); // Count the elements in the given array
    $removeNumber = floor($count*($variation/100)); // Calculate the number of elements to remove

    // Create an array holding the index numbers for splicing, these numbers are random.
    for($i=0; $i<$removeNumber; $i++) {
        $removeArray[] = rand(0,$count-1);
    }

    // Loop through the removeArray to retrieve the indexes to splice at.
    for($i=0; $i<count($removeArray); $i++) {
        $subArray[] = $array[$removeArray[$i]];
        array_splice($array, $removeArray[$i], 1);
    }

    // return the newly spliced array and the spliced items array
    return array($array, $subArray);

}

$oldArray = array('1','2','3','4','5','6','7','8','9','10','11',
    '12','13','14','15','16','17','18','19','20','21','22','23','24',
    '25','26','27','28','29','30','31','32','33','34','35',
    '36','37','38','39','40');

$array = splitArray(5, $oldArray);
$subArray = $array[0];
$newArray = $array[1];

【讨论】:

  • 我需要两个数组,这就是为什么不使用函数来解决这个问题..
  • @sAnS 当你说两者时,你是什么意思?删除项目的数组?可以轻松地将它添加到函数中,但你有适合你的东西,这很好。
  • @sAnS 我将其更改为同时具有拆分数组和拆分项数组:)
【解决方案2】:
<?php

function subtractFromArray($array,$percentage){
//Randonmising the array
shuffle($array);

//percentage numeric equivalent wrt array aize
$substract_variation_count = floor(sizeof($array) * $percentage/100);

//New extracted array
$new_array = array_slice($array,$substract_variation_count);

//retuns the new array with 38 elements
return $new_array;

}

//array with all elements
$array = array('1','2','3','4','5','6','7','8','9','10','11',
'12','13','14','15','16','17','18','19','20','21','22','23','24',
'25','26','27','28','29','30','31','32','33','34','35',
'36','37','38','39','40');

//get new array
$new_array = subtractFromArray($array,5);
//print new array
print_r($new_array);

//Substracted array with 2 elements
$substrcated_array = array_diff($array,$new_array);
print_r($substrcated_array);

?>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多