我需要您的建议。我有一个数组,我需要找到具有相同键值的数组。然后,我需要比较已建立数组的另一个键,并删除键值较低的数组。
以下示例。
如您所见,有两个具有相同EAN键的阵列。我需要找到具有相同EAN的阵列。然后通过键ProductCount比较这两个数组。具有较高ProdouctCount的数组应删除。你懂吗?
[20] => Array
(
[ean] => **6900532615069**
[productPrice] => 1140
[productCount] => 50
)
[25] => Array
(
[ean] => 6900535364122
[productPrice] => 1140
[productCount] => 50
)
[36] => Array
(
[ean] => **6900532615069**
[productPrice] => 1140
[productCount] => 10
)
function removeduplicateKeys($data){
$_data = array();
foreach ($data as $v) {
if (isset($_data[$v['ean']])) {
// found duplicate
continue;
}
// remember unique item
$_data[$v['ean']] = $v;
}
$data = array_values($_data);
return $data;
}
因此输出应为
[25] => Array
(
[ean] => 6900535364122
[productPrice] => 1140
[productCount] => 50
)
[36] => Array
(
[ean] => **6900532615069**
[productPrice] => 1140
[productCount] => 10
)
我试图做大约三天,但我没有做。我所做的最远的事情是删除重复的数组,但是我不知道如何比较键值然后删除数组。如有任何建议,我将不胜感激。谢谢。
答案 0 :(得分:0)
您可以使用array_column使数组具有关联性。
这意味着它将覆盖所有重复的数组。
然后只需将array_values设置回原始索引键即可。
$arr = array_values(array_column($arr, NULL, "ean"));
编辑:我看到您想要键25和36。
上面的代码将为您提供20和25。
要获得预期的结果,您需要先对数组进行排序以使其向后排列。
rsort($arr);
$arr = array_values(array_column($arr, NULL, "ean"));
array_column将创建一个像这样的数组:
[**6900532615069**] => Array
(
[ean] => **6900532615069**
[productPrice] => 1140
[productCount] => 50
)
[6900535364122] => Array
(
[ean] => 6900535364122
[productPrice] => 1140
[productCount] => 50
)
[**6900532615069**] => Array
(
[ean] => **6900532615069**
[productPrice] => 1140
[productCount] => 10
)
但是由于只能有一个具有相同键的数组,所以第二个数组将覆盖第一个给定:
[6900535364122] => Array
(
[ean] => 6900535364122
[productPrice] => 1140
[productCount] => 50
)
[**6900532615069**] => Array
(
[ean] => **6900532615069**
[productPrice] => 1140
[productCount] => 10
)
如果首先使用rsort()
,它将代替另一个数组。
然后Array_values将删除数组中的“ ean”,使其变为0,1,2 ...
如果数组未排序,则需要首先在productcount上对数组进行排序。
usort($arr, function ($a, $b) {
return $b['productCount'] - $a['productCount'];
});
$arr = array_values(array_column($arr, NULL, "ean"));
var_dump($arr);