查找重复值并比较另一个键



我需要你的建议。我有一个数组,我需要找到具有相同键值的数组。然后我需要比较已建立数组的另一个键并删除键值较低的数组。

下面是示例。

如您所见,有两个具有相同 EAN 密钥的数组。我需要找到具有相同 EAN 的数组。然后按关键产品计数比较这两个数组。应删除具有更高 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...

工作代码 https://3v4l.org/sfPQr


如果数组未排序,则需要先对 productcount 对数组进行排序。

usort($arr, function ($a, $b) {
return $b['productCount'] - $a['productCount'];
});

$arr = array_values(array_column($arr, NULL, "ean"));
var_dump($arr);

https://3v4l.org/WZKLB

相关内容

  • 没有找到相关文章