Как динамически объединить два набора данных / массива в зависимости от их количества

Итак, у меня есть это требование, что у меня есть два набора данных (хранятся в массивах, но может быть что угодно). То, что я хочу сделать, это то, что я хочу добавить эти два набора вместе, чтобы итоговый результат был равен 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 фактические результаты подсчета в двух наборах / массивах. $requiredSet1Countа также $requiredSet2Count мне нужны динамические значения, которые подскажут, сколько элементов нужно извлечь из каждого набора.

Любая помощь очень ценится!

0

Решение

Я не знаю вариант без 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)
1

Другие решения

Других решений пока нет …