在多维数组中查找重复值

时间:2018-05-11 16:59:43

标签: php arrays

鉴于此数组:

Array
(
    [0] => Array
        (
            [id] => 3
            [name] => aaa
        )

    [1] => Array
        (
            [id] => 2
            [name] => bbb
        )

    [2] => Array
        (
            [id] => 3
            [name] => aaa
        )

    [3] => Array
        (
            [id] => 1
            [name] => ccc
        )

    [4] => Array
        (
            [id] => 3
            [name] => aaa
        )        
)

如何检查特定键的值是否多次使用并返回键?

例如,我想知道哪些键具有重复的" id"子键。在这种情况下,id = 3会出现不止一次,因此结果将是

Array
(
    [0] => 2
    [1] => 4
)

请注意,索引0不包含在内,因为它实际上没有重复,因为它是第一个出现的。

2 个答案:

答案 0 :(得分:3)

迭代您的数组并将每个项的id添加到数组中。如果您遇到已在数组中的ID,请将其键添加到重复数组中。

foreach ($array as $key => $item) {
    if (isset($ids[$item['id']])) {
        $duplicates[] = $key;
    } else {
        $ids[$item['id']] = true;
    }
}

我更喜欢使用唯一属性(在案例中为id)作为键(如$ids[$item['id']])而不是值,因此可以使用isset而不是{来查找} {1}}。

答案 1 :(得分:2)

如果您尝试找到重复的值,而不是消除它们,您可以通过合并array_column array_diff_uassocarray_unique来返回保留索引时重复值的数组:

$ids = array_column($originalArray, 'id');
$uniqueIds = array_unique($ids);
$repeatedValuesArray = array_diff_uassoc($ids, $uniqueIds, "key_compare_func");