<?php
/**
* Normalizes cookie data based on a configuration file.
*
* @param array $cookies An array of cookies to normalize.
* @param string $config_file Path to the configuration file.
*
* @return array Normalized cookie data.
* @throws Exception If configuration file not found or invalid.
*/
function normalizeCookies(array $cookies, string $config_file): array
{
// Load configuration
$config = loadConfig($config_file);
if (!$config) {
throw new Exception("Configuration file not found or invalid: " . $config_file);
}
$normalized_cookies = [];
foreach ($cookies as $cookie) {
$normalized_cookie = [];
foreach ($config['cookie_fields'] as $field) {
if (isset($cookie[$field])) {
$normalized_cookie[$field] = normalizeField($cookie[$field], $config[$field]);
}
}
$normalized_cookies[] = $normalized_cookie;
}
return $normalized_cookies;
}
/**
* Normalizes a single cookie field based on its configuration.
*
* @param mixed $value The raw cookie value.
* @param array $config The configuration for the field.
*
* @return mixed The normalized cookie value.
*/
function normalizeField($value, array $config)
{
switch ($config['type']) {
case 'int':
$value = (int)$value;
break;
case 'float':
$value = (float)$value;
break;
case 'string':
$value = (string)$value;
break;
case 'boolean':
$value = (bool)$value;
break;
case 'date':
$value = formatDate($value, $config['format']);
break;
default:
$value = $value; // No normalization needed
}
return $value;
}
/**
* Formats a date according to the specified format.
*
* @param mixed $date The date value.
* @param string $format The date format.
*
* @return string The formatted date.
*/
function formatDate($date, string $format): string
{
if (is_numeric($date)) {
return date("Y-m-d H:i:s", $date);
}
return $date;
}
/**
* Loads configuration from a file.
*
* @param string $file_path The path to the configuration file.
*
* @return array|null The configuration array, or null if loading fails.
*/
function loadConfig(string $file_path): ?array
{
if (file_exists($file_path)) {
$config = json_decode(file_get_contents($file_path), true);
if (json_last_error() === JSON_ERROR_NONE) {
return $config;
}
}
return null;
}
?>
Add your comment