<?php
/**
* Diff metadata datasets without external libraries.
*
* @param array $dataset1 The first dataset (array of associative arrays).
* @param array $dataset2 The second dataset (array of associative arrays).
* @param string $key The key to compare within each dataset entry.
* @return array An array of differences, where each element is an array
* containing the key and the differing values from dataset1 and dataset2.
*/
function diffMetadataDatasets(array $dataset1, array $dataset2, string $key): array
{
$differences = [];
// Create associative arrays for easier lookup
$dataset1_map = [];
foreach ($dataset1 as $item) {
if (isset($item[$key])) {
$dataset1_map[$item[$key]] = $item;
}
}
$dataset2_map = [];
foreach ($dataset2 as $item) {
if (isset($item[$key])) {
$dataset2_map[$item[$key]] = $item;
}
}
// Find items present in dataset1 but not in dataset2
foreach ($dataset1_map as $key => $item1) {
if (!isset($dataset2_map[$key])) {
$differences[] = [$key => ['dataset1' => $item1, 'dataset2' => null]];
}
}
// Find items present in dataset2 but not in dataset1
foreach ($dataset2_map as $key => $item2) {
if (!isset($dataset1_map[$key])) {
$differences[] = [$key => ['dataset1' => null, 'dataset2' => $item2]];
}
}
// Find differences for common keys
foreach ($dataset1_map as $key => $item1) {
if (isset($dataset2_map[$key])) {
$item2 = $dataset2_map[$key];
// Compare values for each key in the items
$diff = [];
foreach ($item1 as $k => $v) {
if ($v !== $item2[$k]) {
$diff[$k] = ['dataset1' => $v, 'dataset2' => $item2[$k]];
}
}
if (!empty($diff)) {
$differences[] = [$key => ['dataset1' => $item1, 'dataset2' => $item2, 'diff' => $diff]];
}
}
}
return $differences;
}
//Example Usage (for testing)
/*
$dataset1 = [
['id' => 1, 'name' => 'Alice', 'age' => 30],
['id' => 2, 'name' => 'Bob', 'age' => 25],
['id' => 3, 'name' => 'Charlie', 'age' => 35],
];
$dataset2 = [
['id' => 1, 'name' => 'Alice', 'age' => 30],
['id' => 2, 'name' => 'Robert', 'age' => 25],
['id' => 4, 'name' => 'David', 'age' => 40],
];
$differences = diffMetadataDatasets($dataset1, $dataset2, 'id');
print_r($differences);
*/
?>
Add your comment