如何根据数量动态合并两组 data/array

How to merge two sets of data/array dynamically based on their count

所以,我有这样的要求,我有两组数据(存储在数组中,但可以是任何东西)。我想做的是,我想将这两个集合加在一起,以便最终结果计数为 10。

场景是:

  1. 两组最初都可以有 5 个以上(或 10 个)。在这种情况下很容易——我只需从每组中取出 5 个并将它们加在一起并显示

  2. 任何一组都可以少于 5。在这种情况下,我应该拿那组中可用的任何东西。在另一组中,我应该取多少才能使总数达到 10,如果另一组的计数很低以至于总数不能达到 10,那么我应该全部取完并显示我得到的任何东西。

基于这个要求,我正在尝试编写一个逻辑,它会给我每组所需的计数,但是 if-else-if-else 变得太复杂了,我认为我可能做错了。谁能帮我创建一个更简单的逻辑来完成我需要的事情?

我目前的(不完整和复杂的)逻辑是:

if($set1Count >= 5)
{
    $requiredSet1Count = 5;
    if($set2Count >= 5)
    {
        $requiredSet2Count = 5;
    }
    else
    {
        $requiredSet2Count = $set2Count;
        if($requiredSet1Count > = (10 - $set2Count))
        {
            $requiredSet1Count = (10 - $set2Count);
        }
        else
        {
            $requiredSet1Count = $set1Count;
        }
    }
}
else
{
    .....// I gave up by the time I reached here....
}

上面代码中的$set1Count$set2Count是两个sets/arrays中的实际结果计数。 $requiredSet1Count$requiredSet2Count 是我需要的动态计数,它会告诉我从每个集合中提取多少元素。

非常感谢任何帮助!

我不知道没有 ifs 的变体。让我们尝试针对每种情况使用一个

function requiredSet($set1count, $set2count) {
// Both arrays together contain less than 10 items
    if ($set1count + $set2count <= 10) { 
        $requiredSet1Count  = $set1count;  $requiredSet2Count = $set2count;
    }
// 1st less than 5 elements
    elseif ($set1count < 5) {
        $requiredSet1Count  = $set1count;
        $requiredSet2Count  = $set2count + $set1count > 10 ? 10 - $set1count : $set2count;
    }
// 2nd - less than 5 elements
    elseif ($set2count < 5) {
        $requiredSet2Count  = $set2count;
        $requiredSet1Count  = $set1count + $set2count > 10 ? 10 - $set2count : $set1count;
    }
// Just take 5 elements in each
    else $requiredSet1Count = $requiredSet2Count = 5;

    return array($requiredSet1Count, $requiredSet2Count);
}

echo '<pre>';
var_export(requiredSet(1,2)); echo '<br>';
var_export(requiredSet(2,5)); echo '<br>';
var_export(requiredSet(2,7)); echo '<br>';
var_export(requiredSet(2,13)); echo '<br>';
var_export(requiredSet(13,11)); echo '<br>';

结果

array ( 0 => 1, 1 => 2)
array ( 0 => 2, 1 => 5)
array ( 0 => 2, 1 => 7)
array ( 0 => 2, 1 => 8)
array ( 0 => 5, 1 => 5)