I am designing a batch engine for my catalog. Here you can add a certain number of products to the package and discount. When you order products, the script should determine which packages are relevant to your order.
Here is my code:
// packages $packages["package1"] = array(1,1,2); $packages["package2"] = array(1,2); //orderlist $orderlist = array(1,1,2,1,2,2); // put the order list in a temp array $temp_product_array = $orderlist; foreach($packages as $pname => $package_array) { $no_more_package = 0; do { // put the package products in a temp array $temp_package_array = $package_array; $is_packages_array = array_intersect($temp_package_array,$temp_product_array); // if all package values are present if(count($is_packages_array) == count($temp_package_array)) { // add package name $packages_in_order[] = $pname; // filter the package out of the product list but keep duplicate values foreach($temp_product_array as $key1 => $pid1) { foreach($temp_package_array as $key2 => $pid2) { if($pid1==$pid2) { unset($temp_product_array[$key1]); unset($temp_package_array[$key2]); break; // after removing go to the next product to prevent double erasing } } } } else { $no_more_package = 1; } } while($no_more_package<1); } print_r($packages_in_order); print_r($temp_product_array);
Result:
Array ( [0] => package1 [1] => package1 ) Array ( [5] => 2 )
But I want the result to be:
Array ( [0] => package1 [1] => package2 ) Array ( [5] => 2 )
I tried array_diff , array_intersect , but they all do not work with duplicate values.
Does anyone have a better / working way to resolve this issue?
(PS because of different sources I can not work with associative arrays)
source share