Когда Как разбить массив на два или более массивов с почти равной суммой? - PullRequest
1 голос
/ 28 апреля 2019
  • Если стоимость всех товаров в заказе превышает 250 долларов, разбейте их на несколько пакетов, в противном случае одной упаковки будет достаточно.
  • Если товары в одном заказе разделеныв несколько пакетов, тогда вес пакетов должен быть равномерно распределен по пакетам для экономии расходов курьера.
  • При разделении, НЕТ ПАКЕТА может иметь общую цену, равную или превышающую 250

    * 1008 долларов США.* Имя Цена ($) Вес (г)
  • Элемент списка

Я много работал над следующей логикой, ноне достиг.Пожалуйста, помогите мне решить эту проблему. Спасибо заранее

Я пробовал использовать следующий код, который может определять код на основе веса, но когда речь идет о ценовой логике, это не получается.

<code>$in = array(10=>200, 30=>300, 200=>10, 20=>500, 40=>10, 100=>20);
function devideArray($in){

// Sort array decreasing
arsort($in, SORT_NUMERIC);

// Start with two empty arrays
$arr1 = $arr2 = array();

// Put the next value in the array in the array with the lowest sum
foreach ($in as  $k=>$value){
   // echo $k."===".$value; echo "<br>";
  if (array_sum($arr2) > array_sum($arr1)) $arr1[$k] = $value; else $arr2[$k] = $value;

}
// Wrap in array (as in question)
$out = array($arr1,$arr2);
return $out;
}
$array = devideArray($in);
echo "<pre>";print_r($array);echo "
";

Упаковка 1

Предметы - Товар 1, Товар 3, Товар 7 Общий вес - 510 г Общая стоимость - 240

Упаковка2

Предметы - Товар 4, Товар 6, Товар 2 Общий вес - 530 г Общая стоимость - 160 долларов США Курьерская цена - 15 долларов США

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...