gpt4 book ai didi

php - 使用 array_intersect 将数组与重复值进行比较?

转载 作者:可可西里 更新时间:2023-10-31 23:49:23 25 4
gpt4 key购买 nike

我正在为我的目录设计一个包引擎。在这里,您可以将一定数量的产品添加到套餐中并享受折扣。当您订购产品时,脚本必须检测哪些包裹交易适用于您的订单。

这是我的代码:

// 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 ) 

但我希望结果是:

Array ( [0] => package1 [1] => package2 ) Array ( [5] => 2 )

我尝试了 array_diffarray_intersect,但它们都不能很好地处理重复值。

有没有人有更好的/可行的方法来解决这个问题?
(PS 因为不同的来源我不能使用关联数组)

最佳答案

// packages
$packages["package1"] = array(1,1,2);
$packages["package2"] = array(1,2);

//orderlist
$orderlist = array(1,1,1,2,2,2);



// put the order list in a temp array
$temp_product_array = $orderlist;
$product_count_array = array_count_values($temp_product_array);

foreach($packages as $pname => $temp_package_array)
{
$no_more_package = 0;
do
{
$test_package_array = array();

foreach($temp_package_array as $key => $pid)
{
// check if the product is still in the order totals
if(isset($product_count_array[$pid]) && $product_count_array[$pid]>0)
{
$product_count_array[$pid]--;
$test_package_array[] = $pid;
}
else
{
$no_more_package = 1;
}
}
// check if the found products match the package count
if(count($temp_package_array)==count($test_package_array))
{
$packages_in_order[] = $pname;
}
else
{
// add the extracted products in case of incomplete package
foreach($test_package_array as $pid)
{
$product_count_array[$pid]++;
}
}


}
while($no_more_package<1);
}

print_r($packages_in_order);
print_r($product_count_array);

关于php - 使用 array_intersect 将数组与重复值进行比较?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12931515/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com