php - 合并两个数组,根据其属性保留一个版本的合并元素
问题描述
我有如下三个数组:
$一个=数组( 大批 ( '供应商名称' => 'SUP1', 'product_code' => 'ITM001', '产品' => '书', '价格' => '5500', ), 大批 ( '供应商名称' => 'SUP1', 'product_code' => 'ITM002', '产品' => '铅笔', '价格' => '1500', ), 大批 ( '供应商名称' => 'SUP1', 'product_code' => 'ITM002', '产品' => '橡皮擦', '价格' => '1750', ), ) $两个 = 数组 ( 大批 ( '供应商名称' => 'SUP2', 'product_code' => 'SP001', '产品' => '书', '价格' => '5250', ), 大批 ( '供应商名称' => 'SUP2', 'product_code' => 'SP002', '产品' => '铅笔', '价格' => '1550', ), 大批 ( '供应商名称' => 'SUP2', 'product_code' => 'SP002', '产品' => '标尺', '价格' => '2300', ), ) $三=数组( 大批 ( '供应商名称' => 'SUP3', 'product_code' => 'BRG01', '产品' => '书', '价格' => '5250', ), 大批 ( '供应商名称' => 'SUP3', 'product_code' => 'BRG02', '产品' => '标尺', '价格' => '2350', ), 大批 ( '供应商名称' => 'SUP3', 'product_code' => 'BRG02', '产品' => '画册', '价格' => '4500', ), )
我已经将上述所有数组与 array_merge 合并。
$all_array = array (
0 =>
array (
'supplier_name' => 'SUP1',
'product_code' => 'ITM001',
'product' => 'Book',
'price' => '5500',
),
1 =>
array (
'supplier_name' => 'SUP1',
'product_code' => 'ITM002',
'product' => 'Pencil',
'price' => '1500',
),
2 =>
array (
'supplier_name' => 'SUP1',
'product_code' => 'ITM002',
'product' => 'Eraser',
'price' => '1750',
),
3 =>
array (
'supplier_name' => 'SUP2',
'product_code' => 'SP001',
'product' => 'Book',
'price' => '5250',
),
4 =>
array (
'supplier_name' => 'SUP2',
'product_code' => 'SP002',
'product' => 'Pencil',
'price' => '1550',
),
5 =>
array (
'supplier_name' => 'SUP2',
'product_code' => 'SP002',
'product' => 'Ruler',
'price' => '2300',
),
6 =>
array (
'supplier_name' => 'SUP3',
'product_code' => 'BRG01',
'product' => 'Book',
'price' => '5250',
),
7 =>
array (
'supplier_name' => 'SUP3',
'product_code' => 'BRG02',
'product' => 'Ruler',
'price' => '2350',
),
8 =>
array (
'supplier_name' => 'SUP3',
'product_code' => 'BRG02',
'product' => 'Drawing book',
'price' => '4500',
),
)
如何删除具有更高价值的重复项并仅获得所有项目的更低价格。
Array
(
[0] => Array
(
[supplier_name] => SUP2
[product_code] => SP001
[product] => Book
[price] => 5250
)
[1] => Array
(
[supplier_name] => SUP1
[product_code] => ITM002
[product] => Pencil
[price] => 1500
)
[2] => Array
(
[supplier_name] => SUP1
[product_code] => ITM002
[product] => Eraser
[price] => 1750
)
[3] => Array
(
[supplier_name] => SUP2
[product_code] => SP002
[product] => Ruler
[price] => 2300
)
[4] => Array
(
[supplier_name] => SUP3
[product_code] => BRG02
[product] => Drawing book
[price] => 4500
)
)
请指教。谢谢你。
解决方案
看来您正在使用 PHP。尽管使用唯一的命名键映射您的产品会更好,也不会那么痛苦,但这是解决您问题的一种方法。
不要使用 array_merge,因为它不允许您使用回调来仅保留更便宜的产品。
这是您可以使用的伪代码(而不是我提供的未经测试的 php)。使其适应您的源代码。
// Everything has a beginning.
array_result = array()
// Browsing array1
For each item of array1
found_item = false
// For each product of array1, seeking for the same product in array2
For each item2 of array2
If areTheSameProduct(item1, item2)
If item1.price < item2.price Then
appendToArray(array_result, item1)
Else
appendToArray(array_result, item2)
End If
found_item = true
// Removing then the product in array2, to let at the end only
// the ones which was't found in array1.
// In PHP, use here unset() to remove an element from the array.
// "key" parameter can be a named index or the classic integer one
unset(array1[key of item2])
Break // No need to continue the loop on array2
End If
End For
// Item not found in array2? We'll keep the one of array1.
If (Not found_item) Then appendToArray(array_result, item1)
End For
// For the remaining values of array_two (which were not in array1)
For each item2 of array2
appendToArray(array_result, item2 )
End For
// Comparator function
Function areTheSameProduct(item1, item2)
return (item1.supplier_name == item2.supplier_name) AND
(item1.product_code == item2.product_code) AND
(item1.product == item2.product)
End Function
推荐阅读
- php - 将用户插入sql数据库的问题
- flutter - 类String在flutter中没有实例getter
- node.js - MethodOverride 不适用于 DELETE 请求
- php - Laravel maatwebsite 打包数据导出问题
- c# - 是否可以在不分配结果的情况下使用条件运算符?
- html - content=no-referrer 和 rel=noreferrer 有什么区别
- sql - Db2 LAG 函数可以引用自身吗?
- c# - 如何使用 c# 获取添加的现有项目的部署版本?
- c++ - 为什么在 windows10 上构建并在 Windows7 上运行时出现“非法指令”错误
- php - 一般错误:3780 在外键约束“fk_post”中引用列“post_id”和引用列“id”不兼容