找到重复的值并比较另一个键

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 ......

工作代码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

以上是关于找到重复的值并比较另一个键的主要内容,如果未能解决你的问题,请参考以下文章

在对象的 json 数组中找到一个键值并返回另一个带有角度的键值

根据数组中的值检查值并使用 PHP 返回键

使用在另一个片段(NPE)中生成的值设置片段的 TextView [重复]

将行与标题进行比较,然后在列中插入值并在 VBA 中进行重复检查

轻松保存重复多用的代码片段

获取单个变量中的多个值并使用它与另一个变量中的单个值进行比较