1. <?php
  2. /**
  3. * Attaches metadata to user input with defensive checks.
  4. *
  5. * @param array $data The input data array.
  6. * @param string $metadata_key The key to store the metadata under.
  7. * @param array $metadata The metadata array to attach.
  8. * @return array The modified data array with metadata attached. Returns original data if input is invalid.
  9. */
  10. function attachMetadata(array $data, string $metadata_key, array $metadata): array
  11. {
  12. // Defensive check: Ensure input data is an array
  13. if (!is_array($data)) {
  14. error_log("attachMetadata: Input data is not an array.");
  15. return $data; // Return original data if invalid
  16. }
  17. // Defensive check: Ensure metadata_key is a string
  18. if (!is_string($metadata_key)) {
  19. error_log("attachMetadata: metadata_key is not a string.");
  20. return $data; // Return original data if invalid
  21. }
  22. // Defensive check: Ensure metadata is an array
  23. if (!is_array($metadata)) {
  24. error_log("attachMetadata: metadata is not an array.");
  25. return $data; // Return original data if invalid
  26. }
  27. // Defensive check: Prevent overwriting existing metadata
  28. if (isset($data[$metadata_key])) {
  29. error_log("attachMetadata: Metadata key already exists. Skipping attachment.");
  30. return $data; // Skip if key already exists
  31. }
  32. // Attach metadata
  33. $data[$metadata_key] = $metadata;
  34. return $data;
  35. }
  36. //Example usage (for testing - remove before production)
  37. /*
  38. $input_data = ['name' => 'John Doe', 'email' => 'john.doe@example.com'];
  39. $metadata = ['created_at' => date('Y-m-d H:i:s'), 'user_id' => 123];
  40. $modified_data = attachMetadata($input_data, 'user_metadata', $metadata);
  41. print_r($modified_data);
  42. */
  43. ?>

Add your comment