Php 在多维数组中查找重复值

Php 在多维数组中查找重复值,php,arrays,Php,Arrays,鉴于此阵列: Array ( [0] => Array ( [id] => 3 [name] => aaa ) [1] => Array ( [id] => 2 [name] => bbb ) [2] => Array ( [id

鉴于此阵列:

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不包括在内,因为它实际上没有重复,因为它是第一个出现的。

如果您试图查找重复值,而不是消除重复值,可以通过组合并返回重复值数组来实现,同时维护索引:

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

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

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

我更喜欢使用unique属性(
id
在本例中)作为键(比如
$id[$item['id']]]]
),而不是值,这样就可以使用
isset
来查找它,而不是在数组中创建第二个数组。通过第一个循环。对于每个,检查
id
是否在第二个数组中。如果不是,请添加它。如果是,则回显当前项的索引(或将该索引添加到第三个数组以创建您正在显示的数组)如果id 1也被重复,结果会是什么样?如何区分1和3?@abracadver然后它的重复索引将被添加到最终结果中,因此从您的示例数组中,如果数组[1]的id为1,而数组[3]的id为1,则结果将是
2,3,4
?@abracadver这是correct@MatíasCánepa编辑应该有效,但更简单的版本是
array_diff_assoc($ids,$uniqueIds)答案只是提供了一个额外的索引检查。我不知道你为什么要使用isset($ids[$item['id']]]@whoami来检查当前项目的id是否已经添加到id数组中,这意味着当前项目是重复的。多棒的答案啊,我每天都在处理数组,仍然对数组感到恐慌,这是学习数组的好方法