1. <?php
  2. /**
  3. * Deduplicates form field records for non-production use with a dry-run mode.
  4. *
  5. * @param array $data An array of form field data, where each element is an associative array.
  6. * @param array $fields An array of field names to consider for deduplication.
  7. * @param bool $dry_run Whether to only show the changes without actually applying them.
  8. * @return array An array of deduplicated records.
  9. */
  10. function deduplicateFormFields(array $data, array $fields, bool $dry_run = true): array
  11. {
  12. $seen = [];
  13. $deduplicated_data = [];
  14. foreach ($data as $record) {
  15. $key = '';
  16. foreach ($fields as $field) {
  17. if (isset($record[$field])) {
  18. $key .= $record[$field] . '|'; // Create a unique key based on specified fields
  19. }
  20. }
  21. if (empty($key)) {
  22. // Skip records with no specified fields
  23. continue;
  24. }
  25. if (in_array($key, $seen)) {
  26. if ($dry_run) {
  27. echo "Dry Run: Skipping duplicate record: " . json_encode($record) . "\n";
  28. } else {
  29. // Remove the duplicate record
  30. unset($record);
  31. }
  32. } else {
  33. $seen[] = $key;
  34. $deduplicated_data[] = $record;
  35. }
  36. }
  37. return $deduplicated_data;
  38. }
  39. // Example Usage (Non-Production)
  40. /*
  41. $form_data = [
  42. ['name' => 'John Doe', 'email' => 'john.doe@example.com', 'age' => 30],
  43. ['name' => 'Jane Smith', 'email' => 'jane.smith@example.com', 'age' => 25],
  44. ['name' => 'John Doe', 'email' => 'john.doe@example.com', 'age' => 30], // Duplicate
  45. ['name' => 'Peter Jones', 'email' => 'peter.jones@example.com', 'age' => 40],
  46. ['name' => 'Jane Smith', 'email' => 'jane.smith@example.com', 'age' => 25], // Duplicate
  47. ];
  48. $fields_to_deduplicate = ['name', 'email'];
  49. $deduplicated_data = deduplicateFormFields($form_data, $fields_to_deduplicate, true);
  50. echo "Deduplicated Data:\n";
  51. print_r($deduplicated_data);
  52. */
  53. ?>

Add your comment