gpt4 book ai didi

php - 如何在php中根据特定百分比和特定顺序将数组元素推送到三个数组上?

转载 作者:行者123 更新时间:2023-12-02 01:26:18 24 4
gpt4 key购买 nike

我正在尝试解决这个问题:

我将 3 个百分比 (%) 存储在三个调用者中:(调用者 1、调用者 2 和调用者 3),如下所示:

$callers = [
'Caller1' => 50,
'Caller2' => 30,
'Caller3' => 20
];

我有十个号码要调用,我想根据每个调用者的百分比将号码分配给他们。

示例:

如果数字为 (1, 2, 3 ,4 ,5 ,6 ,7 ,8,9,10),则应根据调用的百分比按照以下顺序拆分调用(注意:如下顺序):

  • 来电者1:1,4,7,9,10
  • 调用者 2:2,5,8
  • 调用者3:3,6

我的代码是这样的:

class MyClassName
{
// Each caller with their call percentage
private $callers = [
'caller1' => 50,
'caller2' => 30,
'caller3' => 20
];

public $caller1 = array();
public $caller2 = array();
public $caller3 = array();

public function splitCalls(array $numbers)
{
//count numbers
//get spesific number of each percentage
//loop on numbers and push numbers into 3 arrays based on percentage
$count = count($numbers);
$callerOneNumbers = floor(($this->callers['caller1'] / 100) * $count);
$callerTwoNumbers = floor(($this->callers['caller2'] / 100) * $count);
$callerThreeNumbers = floor(($this->callers['caller3'] / 100) * $count);

for ($i = 0; $i <= $count; $i++) {
if (count($this->caller1) < $callerOneNumbers) {
array_push($this->caller1, $numbers[$i]);
$i++;
}

if (count($this->caller2) < $callerTwoNumbers) {
array_push($this->caller2, $numbers[$i]);
$i++;
}

if (count($this->caller3) < $callerThreeNumbers) {
array_push($this->caller3, $numbers[$i]);
$i++;
}
}
}
}

$obj = new MyClassName;
$split = $obj->splitCalls([1, 2, 3, 4, 5, 6, 7, 8,9,10]);
var_dump($obj->caller1);
var_dump($obj->caller2);
var_dump($obj->caller3);

我的结果是这样的:

array (size=3)
0 => int 1
1 => int 5
2 => int 9
C:\wamp64\www\test.php:102:
array (size=3)
0 => int 2
1 => int 6
2 => int 10
C:\wamp64\www\test.php:103:
array (size=2)
0 => int 3
1 => int 7

但我想要这样:

array (size=3)
0 => int 1
1 => int 4
2 => int 7
3 => int 9
4 => int 10


array (size=2)
0 => int 2
1 => int 5
2 => int 8


array (size=1)
0 => int 3
1 => int 6

请帮忙

最佳答案

代码的主要问题是,在每个循环中,都有 $i++ (在 for() 循环中)。每个循环会跳过 1 个数组条目(本例中为 4 和 8)。因此,解决您的问题的一个简单方法是将循环更改为...

for ($i = 0; $i < $count;) {

正如评论中强调的那样,如果分割不能提供良好的圆形分割,这可能会导致问题。更改为使用 round 而不是 floor 将解决此问题,尽管分割可能看起来不平衡。

例如,分割为 50、30、20 时,2 个项目将给出 [[1], [2], []]。如果没问题,请按照此方法操作。

关于php - 如何在php中根据特定百分比和特定顺序将数组元素推送到三个数组上?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74538427/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com