找到重复的值并比较另一个键
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了找到重复的值并比较另一个键相关的知识,希望对你有一定的参考价值。
我需要你的建议。我有一个数组,我需要找到具有相同键值的数组。然后我需要比较已创建数组的另一个键,并删除具有较低键值的数组。
以下示例。
如您所见,有两个具有相同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
)
我试着做了大约三天,但我不知道怎么做。我做的最远的事情是删除一个重复的数组,但我不知道如何比较一个键值然后删除该数组。我会很感激任何建议。谢谢。
答案
您可以使用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);
以上是关于找到重复的值并比较另一个键的主要内容,如果未能解决你的问题,请参考以下文章
在对象的 json 数组中找到一个键值并返回另一个带有角度的键值
使用在另一个片段(NPE)中生成的值设置片段的 TextView [重复]