php - 合并3个数组,查找重复并比较价格,并以价格升序取最便宜的一个以及唯一值
问题描述
我想在 PHP 中运行一个脚本,我们需要在其中找到重复项并需要从不同的数组中保留最便宜的对。
我们有 3 个供应商(3 个数组),我们需要组合 3 个数组并找到重复项并从重复项中比较价格,并保持最便宜的一个不重复,并保持唯一数据,排序顺序价格上升。请找到以下案例。
注意:需要保持时间复杂度。
$supplier_1[] = array("sr" => "101", "model" => "iphone7", "color" => "silver", "price" => "52000");
$supplier_1[] = array("sr" => "102", "model" => "iphone7", "color" => "gold", "price" => "48000");
$supplier_1[] = array("sr" => "103", "model" => "iphone8", "color" => "red", "price" => "60000");
$supplier_1[] = array("sr" => "104", "model" => "iphoneXR", "color" => "silver", "price" => "72000");
$supplier_1[] = array("sr" => "105", "model" => "Galaxy10", "color" => "black", "price" => "63000");
$supplier_2[] = array("sr" => "201", "model" => "iphone7", "color" => "silver", "price" => "43000");
$supplier_2[] = array("sr" => "202", "model" => "iphone7", "color" => "gold", "price" => "62000");
$supplier_2[] = array("sr" => "203", "model" => "Xaiomi", "color" => "yellow", "price" => "12000");
$supplier_2[] = array("sr" => "204", "model" => "S10", "color" => "Grey", "price" => "80000");
$supplier_3[] = array("sr" => "301", "model" => "iphone7", "color" => "gold", "price" => "63000");
$supplier_3[] = array("sr" => "302", "model" => "iphone7", "color" => "silver", "price" => "48000");
$supplier_3[] = array("sr" => "303", "model" => "Xaiomi", "color" => "yellow", "price" => "18000");
$supplier_3[] = array("sr" => "304", "model" => "S10", "color" => "Grey", "price" => "60000");
$supplier_3[] = array("sr" => "305", "model" => "S12", "color" => "White", "price" => "59000");
// DESIRED RESULT
$result = array(
"0" => array("sr" => "203", "model" => "Xaiomi", "color" => "yellow", "price" => "12000"),
"1" => array("sr" => "201", "model" => "iphone7", "color" => "silver", "price" => "43000"),
"2" => array("sr" => "102", "model" => "iphone7", "color" => "gold", "price" => "48000"),
"3" => array("sr" => "305", "model" => "S12", "color" => "White", "price" => "59000"),
"4" => array("sr" => "103", "model" => "iphone8", "color" => "red", "price" => "60000"),
"5" => array("sr" => "304", "model" => "S10", "color" => "Grey", "price" => "60000"),
"6" => array("sr" => "105", "model" => "Galaxy10", "color" => "black", "price" => "63000"),
"7" => array("sr" => "104", "model" => "iphoneXR", "color" => "silver", "price" => "72000")
);
解决方案
这里的解决方案:
//merge 3 arays to one
$suppliers = array_merge($supplier_1, $supplier_2, $supplier_3);
$result = [];
foreach ($suppliers as $s) {
$key = "{$s['model']}-{$s['color']}";
if (!isset($result[$key]) || $result[$key]['price'] > $s['price']) {
$result[$key] = $s;
}
}
print_r(array_values($result));
下面的MySQL解决方案:
select merged.*
from (
select * from supplier_1
union
select * from supplier_2
union
select * from supplier_3
) merged
join (
select model, color, min(price) min_price
from (
select * from supplier_1
union
select * from supplier_2
union
select * from supplier_3
) merged
group by model, color
) groupped on
groupped.model = merged.model and
groupped.color = merged.color and
groupped.min_price = merged.price;
推荐阅读
- laravel - 如何在每 5 秒后自动更改号码
- android - Android Kotlin:完成工作后让视图类通过
- r - 为什么我不能更改填充图例框的形状?
- java - 检测表达式字符串中的运算符和操作数错误
- python - 如何比较django模型中已经存在的上传文件
- javascript - 多个路由器视图,一次激活 1 个
- aws-glue - AWS Glue 爬虫能够解析结构定义,但 Athena 无法正确读取
- html - RMarkdown 中的粗体和斜体标题
- xamarin - 如何使用相对绑定将 IsEnabled 传递给模板的子级?
- python - Python TypeError:选项值必须是迁移器中的字符串