1. <?php
  2. /**
  3. * Diff metadata datasets without external libraries.
  4. *
  5. * @param array $dataset1 The first dataset (array of associative arrays).
  6. * @param array $dataset2 The second dataset (array of associative arrays).
  7. * @param string $key The key to compare within each dataset entry.
  8. * @return array An array of differences, where each element is an array
  9. * containing the key and the differing values from dataset1 and dataset2.
  10. */
  11. function diffMetadataDatasets(array $dataset1, array $dataset2, string $key): array
  12. {
  13. $differences = [];
  14. // Create associative arrays for easier lookup
  15. $dataset1_map = [];
  16. foreach ($dataset1 as $item) {
  17. if (isset($item[$key])) {
  18. $dataset1_map[$item[$key]] = $item;
  19. }
  20. }
  21. $dataset2_map = [];
  22. foreach ($dataset2 as $item) {
  23. if (isset($item[$key])) {
  24. $dataset2_map[$item[$key]] = $item;
  25. }
  26. }
  27. // Find items present in dataset1 but not in dataset2
  28. foreach ($dataset1_map as $key => $item1) {
  29. if (!isset($dataset2_map[$key])) {
  30. $differences[] = [$key => ['dataset1' => $item1, 'dataset2' => null]];
  31. }
  32. }
  33. // Find items present in dataset2 but not in dataset1
  34. foreach ($dataset2_map as $key => $item2) {
  35. if (!isset($dataset1_map[$key])) {
  36. $differences[] = [$key => ['dataset1' => null, 'dataset2' => $item2]];
  37. }
  38. }
  39. // Find differences for common keys
  40. foreach ($dataset1_map as $key => $item1) {
  41. if (isset($dataset2_map[$key])) {
  42. $item2 = $dataset2_map[$key];
  43. // Compare values for each key in the items
  44. $diff = [];
  45. foreach ($item1 as $k => $v) {
  46. if ($v !== $item2[$k]) {
  47. $diff[$k] = ['dataset1' => $v, 'dataset2' => $item2[$k]];
  48. }
  49. }
  50. if (!empty($diff)) {
  51. $differences[] = [$key => ['dataset1' => $item1, 'dataset2' => $item2, 'diff' => $diff]];
  52. }
  53. }
  54. }
  55. return $differences;
  56. }
  57. //Example Usage (for testing)
  58. /*
  59. $dataset1 = [
  60. ['id' => 1, 'name' => 'Alice', 'age' => 30],
  61. ['id' => 2, 'name' => 'Bob', 'age' => 25],
  62. ['id' => 3, 'name' => 'Charlie', 'age' => 35],
  63. ];
  64. $dataset2 = [
  65. ['id' => 1, 'name' => 'Alice', 'age' => 30],
  66. ['id' => 2, 'name' => 'Robert', 'age' => 25],
  67. ['id' => 4, 'name' => 'David', 'age' => 40],
  68. ];
  69. $differences = diffMetadataDatasets($dataset1, $dataset2, 'id');
  70. print_r($differences);
  71. */
  72. ?>

Add your comment