繁体   English   中英

从多维数组 php 中完全删除重复项

[英]Completely remove duplicates from multidimensional array php

[
    {
        "co": "INS-00002",
        "frequency": "ANNUAL",
        "line_No" : 345589
        "region": "REG-0006"
    },
    {
        "co": "INS-00002",
        "frequency": "MONTHLY",
        "line_No" : 345590
        "region": "REG-0003"
    },
    {
        "co": "INS-00002",
        "frequency": "MONTHLY",
        "line_No" : 345578
        "region": "REG-0002"
    },
    {
        "co": "INS-00002",
        "frequency": "ANNUAL",
        "line_No" : 345589
        "region": "REG-0006"
    },

]

我想要的新 output 数组不应该包含前一个数组中的任何重复值。 它应该看起来像下面的示例

[
   {
        "co": "INS-00002",
        "frequency": "MONTHLY",
        "line_No" : 345590
        "region": "REG-0003"
    },
    {
        "co": "INS-00002",
        "frequency": "MONTHLY",
        "line_No" : 345578
        "region": "REG-0002"
    },
]

您可以创建一个空数组并将每个新项目与其中的所有现有项目进行比较,如果它们不匹配,则将该项目添加到新数组中。

$newArray = array();


foreach ($oldArray as $item)
{
    $duplicate = false;

    foreach ($newArray as $newItem)
    {
        if ($item == $newItem)
        {
            $duplicate = true;
            break;
        }
    }
    
    if (!$duplicate)
    {
        array_push($newArray, $item);
    }
}

print_r($newArray);

array_colum提取 line_Nos, array_count_values对它们进行计数, array_filter从输入数组中过滤那些 line_No 出现次数为 1 的项目。

$input = json_decode('[{"co":"INS-00002","frequency":"ANNUAL","line_No":345589,"region":"REG-0006"},{"co":"INS-00002","frequency":"MONTHLY","line_No":345590,"region":"REG-0003"},{"co":"INS-00002","frequency":"MONTHLY","line_No":345578,"region":"REG-0002"},{"co":"INS-00002","frequency":"ANNUAL","line_No":345589,"region":"REG-0006"}]');

// get all line_No values into array
$line_nos = array_column($input, 'line_No');
// count the number of time those values occur
$line_no_occurrences = array_count_values($line_nos);

// filter input array, take only those items whose line_No occurs with a count of 1
$result = array_filter($input, function($item) use($line_no_occurrences) {
  return $line_no_occurrences[$item->line_No] == 1;
});

var_dump($result);

Output:

array (size=2)
  1 => 
    object(stdClass)[2]
      public 'co' => string 'INS-00002' (length=9)
      public 'frequency' => string 'MONTHLY' (length=7)
      public 'line_No' => int 345590
      public 'region' => string 'REG-0003' (length=8)
  2 => 
    object(stdClass)[3]
      public 'co' => string 'INS-00002' (length=9)
      public 'frequency' => string 'MONTHLY' (length=7)
      public 'line_No' => int 345578
      public 'region' => string 'REG-0002' (length=8)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM