繁体   English   中英

仅在多维数组php中返回重复的值

[英]return only duplicated values in multidimentional array php

我只想获取多维数组中的重复记录。 我的数组看起来像:

"items": [
 {
  "id": "1",
  "father_name": "YYY",
  "surname": "XXX",
  "name": "abc",
 },
 {
  "id": "1",
  "father_name": "YYY",
  "surname": "XXX",
  "name": "abc",
 },
 {
  "id": "2",
  "father_name": "ZZZ",
  "surname": "UUU",
  "name": "abc",
 },
]

我想得到像

"items": [
   {
      "id": "1",
      "father_name": "YYY",
      "surname": "XXX",
      "name": "abc",
   },
]

我怎么才能得到它? 请帮助我,我被困在这里。

我已经尝试了很多东西,但是一切都可以在一维数组中工作

提前致谢!

作为其他答案的替代方法,您还可以执行以下操作:

$duplicates = [];

while ($a = array_shift($array)) {
    if (in_array($a, $array) && !in_array($a, $duplicates)) {
        $duplicates[] = $a;
    }
}

希望这可以帮助!

给定的数据是一个json字符串。

假设您的数组结构相同,请尝试以下操作:

$arr = array("items"=>array(
  "id"=> "1",
  "father_name"=> "YYY",
  "surname"=> "XXX",
  "name"=> "abc",
 ),
 array(
  "id"=> "1",
  "father_name"=> "YYY",
  "surname"=> "XXX",
  "name"=> "abc",
 ),
 array(
  "id"=> "2",
  "father_name"=> "ZZZ",
  "surname"=> "UUU",
  "name"=> "abc",
 )
);

$withoutDuplicates = array_unique($arr, SORT_REGULAR);
$duplicates = array_diff_assoc($arr, $withoutDuplicates);
echo "<pre>";
print_r($duplicates);

输出:

数组([0] =>数组([id] => 1 [father_name] => YYY [surname] => XXX [name] => abc))

<?php

$arr = array(
    'items' => array(
        0 => array(
            'id' => '1',
            'father_name' => 'YYY',
            'surname' => 'XXX',
            'name' => 'abc'
        ),
        1 => array(
            'id' => '1',
            'father_name' => 'YYY',
            'surname' => 'XXX',
            'name' => 'abc'
        ),
        2 => array(
            'id' => '2',
            'father_name' => 'ZZZ',
            'surname' => 'UUU',
            'name' => 'abc'
        )
    )
);

$result = array();
for ($i = 0; $i < count($arr['items'])-1; $i++) {
    for ($x = $i+1; $x < count($arr['items']); $x++) {
        if ($arr['items'][$i] !== $arr['items'][$x] || in_array($arr['items'][$i], $result))
            continue;

        array_push($result, $arr['items'][$i]);
    }
}

print_r($result);

?>

假设您正在处理多维php数组,则是一种解决方法。

您可以执行以下操作:

foreach($items as $key => $item)
{
   unset($items[$key]);
   if(array_search($item['id'], array_column($items, 'id_or_another_key')))
   {
        $result[] = $item;
   }
}

接下来是这段代码的含义:

  1. 您应该在循环中遍历初始数组
  2. 从数组中删除当前项
  3. 通过“ id”值或其余元素之间的另一个键搜索相似的项目
  4. 如果找到该项目,则将其与重复的项目一起放入结果数组。
<?php
/**
 * @param $data array
 * 
 * @return array
 */
function getDuplicatesOnly(array $data): array
{
    $result = [
            'items' => [
                ],
        ];
    foreach ($data as $key => $datum) {
        $itemId = $datum['id'];
        unset($data[$key]);
        $columns = array_column($data, 'id');
        if(in_array($itemId, $columns)) {
           $result['items'][] = $datum;
        }
    }

    return $result;
}

 $testData = [
        'input' => [
            'items' => [
                [
                    'id' => '1',
                    'father_name' => 'YYY',
                    'surname' => 'XXX',
                    'name' => 'abc'
                ],
                [
                    'id' => '1',
                    'father_name' => 'YYY',
                    'surname' => 'XXX',
                    'name' => 'abc'
                ],
                [
                    'id' => '2',
                    'father_name' => 'ZZZ',
                    'surname' => 'UUU',
                    'name' => 'abc'
                ]
            ]
        ],
        'output' => [
                'items' => [
                        [
                            'id' => '1',
                            'father_name' => 'YYY',
                            'surname' => 'XXX',
                            'name' => 'abc'
                        ]
                    ],
            ],
    ];   

$output = getDuplicatesOnly($testData['input']['items']);
assert($testData['output'] == $output, "Failed asserting data.");

可以在这里测试。

暂无
暂无

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

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