1. <?php
  2. /**
  3. * Performs a diff between two datasets of web form data.
  4. *
  5. * @param array $dataset1 The first dataset of form data.
  6. * @param array $dataset2 The second dataset of form data.
  7. * @param string $key The key to compare within each dataset entry.
  8. * @return array An array of differences, formatted as:
  9. * [
  10. * 'added' => [array of data from dataset2 that are not in dataset1],
  11. * 'removed' => [array of data from dataset1 that are not in dataset2],
  12. * 'changed' => [
  13. * [
  14. * 'key' => $key,
  15. * 'old_value' => value from dataset1,
  16. * 'new_value' => value from dataset2
  17. * ]
  18. * ]
  19. * ]
  20. */
  21. function diffDatasets(array $dataset1, array $dataset2, string $key): array
  22. {
  23. $added = [];
  24. $removed = [];
  25. $changed = [];
  26. // Find added data
  27. foreach ($dataset2 as $item) {
  28. $found = false;
  29. foreach ($dataset1 as $item1) {
  30. if ($item1[$key] === $item[$key]) {
  31. $found = true;
  32. break;
  33. }
  34. }
  35. if (!$found) {
  36. $added[] = $item;
  37. }
  38. }
  39. // Find removed data
  40. foreach ($dataset1 as $item) {
  41. $found = false;
  42. foreach ($dataset2 as $item2) {
  43. if ($item2[$key] === $item[$key]) {
  44. $found = true;
  45. break;
  46. }
  47. }
  48. if (!$found) {
  49. $removed[] = $item;
  50. }
  51. }
  52. // Find changed data
  53. foreach ($dataset1 as $item1) {
  54. $found = false;
  55. foreach ($dataset2 as $item2) {
  56. if ($item1[$key] === $item2[$key]) {
  57. $found = true;
  58. break;
  59. }
  60. }
  61. if (!$found) {
  62. // Key exists in dataset1 but not in dataset2, consider it removed.
  63. $removed[] = $item1;
  64. continue;
  65. }
  66. if ($item1[$key] !== $item2[$key]) {
  67. $changed[] = [
  68. 'key' => $key,
  69. 'old_value' => $item1[$key],
  70. 'new_value' => $item2[$key],
  71. ];
  72. }
  73. }
  74. return [
  75. 'added' => $added,
  76. 'removed' => $removed,
  77. 'changed' => $changed,
  78. ];
  79. }
  80. /**
  81. * Example Usage (replace with your actual data loading)
  82. */
  83. $dataset1 = [
  84. ['id' => 1, 'name' => 'Alice', 'email' => 'alice@example.com'],
  85. ['id' => 2, 'name' => 'Bob', 'email' => 'bob@example.com'],
  86. ];
  87. $dataset2 = [
  88. ['id' => 1, 'name' => 'Alice Smith', 'email' => 'alice.smith@example.com'],
  89. ['id' => 3, 'name' => 'Charlie', 'email' => 'charlie@example.com'],
  90. ];
  91. $diff = diffDatasets($dataset1, $dataset2, 'id');
  92. print_r($diff);
  93. ?>

Add your comment