php - When How do I split an array into two or more arrays with almost equal sum?

385
  • If the cost of all the items in an order is more than $250, split those items into multiple packages, otherwise one package would be enough.
  • If the items in the same order are split into multiple packages, then the weight of the packages should be equally distributed over the packages to save courier charges.
  • While splitting, NO PACKAGE can have a total price equal or above $250

    Name Price($) Weight(g)

  • List item

I worked a lot on following logic but didn't achieve. Please help me to solve this Thanks in advance

I have tried with the following code, able to decide the code based on weight but when comes to price logic it fails.

$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 "</pre>";

Package 1

Items - Item 1, Item 3, item 7 Total weight - 510g Total price - $240

Package 2

Items - Item 4, Item 6, item 2 Total weight - 530g Total price - $160 Courier price - $15

People are also looking for solutions to the problem: php - helper vs controller performace in laravel 5.*

Source

Didn't find the answer?

Our community is visited by hundreds of web development professionals every day. Ask your question and get a quick answer for free.

Ask a Question

Write quick answer

Do you know the answer to this question? Write a quick response to it. With your help, we will make our community stronger.

Similar questions

Find the answer in similar questions on our website.