鉴于此数组:
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不包含在内,因为它实际上没有重复,因为它是第一个出现的。
答案 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_uassoc和array_unique来返回保留索引时重复值的数组:
$ids = array_column($originalArray, 'id');
$uniqueIds = array_unique($ids);
$repeatedValuesArray = array_diff_uassoc($ids, $uniqueIds, "key_compare_func");