<?php
/**
* Performs a diff between two datasets of web form data.
*
* @param array $dataset1 The first dataset of form data.
* @param array $dataset2 The second dataset of form data.
* @param string $key The key to compare within each dataset entry.
* @return array An array of differences, formatted as:
* [
* 'added' => [array of data from dataset2 that are not in dataset1],
* 'removed' => [array of data from dataset1 that are not in dataset2],
* 'changed' => [
* [
* 'key' => $key,
* 'old_value' => value from dataset1,
* 'new_value' => value from dataset2
* ]
* ]
* ]
*/
function diffDatasets(array $dataset1, array $dataset2, string $key): array
{
$added = [];
$removed = [];
$changed = [];
// Find added data
foreach ($dataset2 as $item) {
$found = false;
foreach ($dataset1 as $item1) {
if ($item1[$key] === $item[$key]) {
$found = true;
break;
}
}
if (!$found) {
$added[] = $item;
}
}
// Find removed data
foreach ($dataset1 as $item) {
$found = false;
foreach ($dataset2 as $item2) {
if ($item2[$key] === $item[$key]) {
$found = true;
break;
}
}
if (!$found) {
$removed[] = $item;
}
}
// Find changed data
foreach ($dataset1 as $item1) {
$found = false;
foreach ($dataset2 as $item2) {
if ($item1[$key] === $item2[$key]) {
$found = true;
break;
}
}
if (!$found) {
// Key exists in dataset1 but not in dataset2, consider it removed.
$removed[] = $item1;
continue;
}
if ($item1[$key] !== $item2[$key]) {
$changed[] = [
'key' => $key,
'old_value' => $item1[$key],
'new_value' => $item2[$key],
];
}
}
return [
'added' => $added,
'removed' => $removed,
'changed' => $changed,
];
}
/**
* Example Usage (replace with your actual data loading)
*/
$dataset1 = [
['id' => 1, 'name' => 'Alice', 'email' => 'alice@example.com'],
['id' => 2, 'name' => 'Bob', 'email' => 'bob@example.com'],
];
$dataset2 = [
['id' => 1, 'name' => 'Alice Smith', 'email' => 'alice.smith@example.com'],
['id' => 3, 'name' => 'Charlie', 'email' => 'charlie@example.com'],
];
$diff = diffDatasets($dataset1, $dataset2, 'id');
print_r($diff);
?>
Add your comment