<?php
/**
* Diffs request headers datasets for maintenance tasks with fixed retry intervals.
*
* @param array $dataset1 First dataset of request headers (array of associative arrays).
* @param array $dataset2 Second dataset of request headers (array of associative arrays).
* @param int $retryInterval Seconds to wait before retrying a request.
* @return array Array of differences between the datasets.
*/
function diffRequestHeaders(array $dataset1, array $dataset2, int $retryInterval): array
{
$differences = [];
if (empty($dataset1) && empty($dataset2)) {
return $differences; // Both datasets are empty, no differences.
}
if (empty($dataset1)) {
return $differences; // dataset1 is empty, return all entries from dataset2 as differences
}
if (empty($dataset2)) {
return $differences; // dataset2 is empty, return all entries from dataset1 as differences
}
// Iterate through dataset1 and check for differences in dataset2.
foreach ($dataset1 as $item1) {
$foundMatch = false;
foreach ($dataset2 as $item2) {
if (isSameDatasetEntry($item1, $item2)) {
$foundMatch = true;
break;
}
}
if (!$foundMatch) {
$differences[] = [
'dataset' => 'dataset1',
'item' => $item1,
'message' => 'Item not found in dataset2.',
];
}
}
// Iterate through dataset2 and check for differences in dataset1.
foreach ($dataset2 as $item2) {
$foundMatch = false;
foreach ($dataset1 as $item1) {
if (isSameDatasetEntry($item1, $item2)) {
$foundMatch = true;
break;
}
}
if (!$foundMatch) {
$differences[] = [
'dataset' => 'dataset2',
'item' => $item2,
'message' => 'Item not found in dataset1.',
];
}
}
return $differences;
}
/**
* Checks if two dataset entries are the same.
*
* @param array $item1 First dataset entry.
* @param array $item2 Second dataset entry.
* @return bool True if the entries are the same, false otherwise.
*/
function isSameDatasetEntry(array $item1, array $item2): bool
{
return array_key_exists('request_url', $item1) && array_key_exists('request_url', $item2) &&
$item1['request_url'] == $item2['request_url'] &&
array_key_exists('user_agent', $item1) && array_key_exists('user_agent', $item2) &&
$item1['user_agent'] == $item2['user_agent'] &&
array_key_exists('headers', $item1) && array_key_exists('headers', $item2) &&
isSameHeaderDataset($item1['headers'], $item2['headers']);
}
/**
* Checks if two header datasets are the same.
*
* @param array $headers1 First header dataset.
* @param array $headers2 Second header dataset.
* @return bool True if the header datasets are the same, false otherwise.
*/
function isSameHeaderDataset(array $headers1, array $headers2): bool
{
if (count($headers1) !== count($headers2)) {
return false;
}
foreach ($headers1 as $key => $value) {
if (!isset($headers2[$key]) || $headers2[$key] !== $value) {
return false;
}
}
return true;
}
// Example Usage (replace with your actual data)
/*
$dataset1 = [
['request_url' => 'https://example.com/api/data', 'user_agent' => 'Mozilla/5.0', 'headers' => ['X-Custom-Header' => 'value1']],
['request_url' => 'https://example.com/api/data', 'user_agent' => '
Add your comment