<?php
/**
* Attaches metadata to user input with defensive checks.
*
* @param array $data The input data array.
* @param string $metadata_key The key to store the metadata under.
* @param array $metadata The metadata array to attach.
* @return array The modified data array with metadata attached. Returns original data if input is invalid.
*/
function attachMetadata(array $data, string $metadata_key, array $metadata): array
{
// Defensive check: Ensure input data is an array
if (!is_array($data)) {
error_log("attachMetadata: Input data is not an array.");
return $data; // Return original data if invalid
}
// Defensive check: Ensure metadata_key is a string
if (!is_string($metadata_key)) {
error_log("attachMetadata: metadata_key is not a string.");
return $data; // Return original data if invalid
}
// Defensive check: Ensure metadata is an array
if (!is_array($metadata)) {
error_log("attachMetadata: metadata is not an array.");
return $data; // Return original data if invalid
}
// Defensive check: Prevent overwriting existing metadata
if (isset($data[$metadata_key])) {
error_log("attachMetadata: Metadata key already exists. Skipping attachment.");
return $data; // Skip if key already exists
}
// Attach metadata
$data[$metadata_key] = $metadata;
return $data;
}
//Example usage (for testing - remove before production)
/*
$input_data = ['name' => 'John Doe', 'email' => 'john.doe@example.com'];
$metadata = ['created_at' => date('Y-m-d H:i:s'), 'user_id' => 123];
$modified_data = attachMetadata($input_data, 'user_metadata', $metadata);
print_r($modified_data);
*/
?>
Add your comment