PHP
Remove Duplicate Associative Arrays by Key
Clean up an array of associative arrays in PHP by efficiently removing duplicate entries, ensuring each unique record is based on a specific key's value.
<?php
function removeDuplicateAssociativeArraysByKey(array $array, string $uniqueKey): array
{
$seenKeys = [];
$uniqueArray = [];
foreach ($array as $item) {
if (isset($item[$uniqueKey]) && !isset($seenKeys[$item[$uniqueKey]])) {
$uniqueArray[] = $item;
$seenKeys[$item[$uniqueKey]] = true; // Mark this key as seen
}
}
return $uniqueArray;
}
$items = [
['id' => 1, 'name' => 'Apple', 'price' => 1.0],
['id' => 2, 'name' => 'Banana', 'price' => 0.5],
['id' => 1, 'name' => 'Apple', 'price' => 1.2], // Duplicate ID
['id' => 3, 'name' => 'Orange', 'price' => 0.7],
['id' => 2, 'name' => 'Banana', 'price' => 0.6], // Duplicate ID
];
$uniqueItems = removeDuplicateAssociativeArraysByKey($items, 'id');
// print_r($uniqueItems);
/*
Array
(
[0] => Array
(
[id] => 1
[name] => Apple
[price] => 1
)
[1] => Array
(
[id] => 2
[name] => Banana
[price] => 0.5
)
[2] => Array
(
[id] => 3
[name] => Orange
[price] => 0.7
)
)
*/
How it works: This function `removeDuplicateAssociativeArraysByKey` filters an array of associative arrays, keeping only the first occurrence of an item based on the value of a specified `$uniqueKey`. It iterates through the array, using a `$seenKeys` auxiliary array to track which unique key values have already been processed, ensuring no duplicates are added to the resulting `$uniqueArray`.