<?php
/**
* Deduplicates form field records for non-production use with a dry-run mode.
*
* @param array $data An array of form field data, where each element is an associative array.
* @param array $fields An array of field names to consider for deduplication.
* @param bool $dry_run Whether to only show the changes without actually applying them.
* @return array An array of deduplicated records.
*/
function deduplicateFormFields(array $data, array $fields, bool $dry_run = true): array
{
$seen = [];
$deduplicated_data = [];
foreach ($data as $record) {
$key = '';
foreach ($fields as $field) {
if (isset($record[$field])) {
$key .= $record[$field] . '|'; // Create a unique key based on specified fields
}
}
if (empty($key)) {
// Skip records with no specified fields
continue;
}
if (in_array($key, $seen)) {
if ($dry_run) {
echo "Dry Run: Skipping duplicate record: " . json_encode($record) . "\n";
} else {
// Remove the duplicate record
unset($record);
}
} else {
$seen[] = $key;
$deduplicated_data[] = $record;
}
}
return $deduplicated_data;
}
// Example Usage (Non-Production)
/*
$form_data = [
['name' => 'John Doe', 'email' => 'john.doe@example.com', 'age' => 30],
['name' => 'Jane Smith', 'email' => 'jane.smith@example.com', 'age' => 25],
['name' => 'John Doe', 'email' => 'john.doe@example.com', 'age' => 30], // Duplicate
['name' => 'Peter Jones', 'email' => 'peter.jones@example.com', 'age' => 40],
['name' => 'Jane Smith', 'email' => 'jane.smith@example.com', 'age' => 25], // Duplicate
];
$fields_to_deduplicate = ['name', 'email'];
$deduplicated_data = deduplicateFormFields($form_data, $fields_to_deduplicate, true);
echo "Deduplicated Data:\n";
print_r($deduplicated_data);
*/
?>
Add your comment