카탈로그 용 패키지 엔진을 설계하고 있습니다. 여기에서 특정 수량의 제품을 패키지에 추가하고 할인 할 수 있습니다. 제품을 주문할 때 스크립트는 주문에 적용되는 패키지 거래를 감지해야합니다.array_intersect를 사용하여 중복 된 값을 가진 배열을 비교 하시겠습니까?
// 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);
결과는 다음과 같습니다 : 여기
내 코드입니다Array ([0] => package1 [1] => package1) Array ([5] => 2)
하지만 결과가되고 싶어요 :
I 시도Array ([0] => package1 [1] => package2) Array ([5] => 2)
array_diff
, array_intersect
하지만 그들은 모두 중복 된 값으로는 잘 작동하지 않습니다.
아무에게도이 문제를 해결하는 더 나은 방법이 있습니까?
(PS는 서로 다른 소스로 인해 연관 배열과 함께 작동하지 못합니다.)
그래서 orderlist이 같은 제품을 포함해야합니다 패키지로 (와 같은 순서로) ? – cmbuckley
주문이 중요합니까? – hakre
주문 목록에는 임의의 수의 pruduct ID가 가능한 순서로 포함되어 있습니다. (스크립트에서 패키지는 할인으로 주문됩니다.) –