1. <?php
  2. /**
  3. * Normalizes metadata data for scheduled runs with defensive checks.
  4. *
  5. * @param array $metadata The input metadata array.
  6. * @return array The normalized metadata array, or an empty array on error.
  7. */
  8. function normalizeMetadata(array $metadata): array
  9. {
  10. // Defensive check: Ensure input is an array
  11. if (!is_array($metadata)) {
  12. error_log("normalizeMetadata: Invalid input - expected array.");
  13. return [];
  14. }
  15. $normalizedMetadata = [];
  16. foreach ($metadata as $key => $value) {
  17. // Defensive check: Ensure key is a string
  18. if (!is_string($key)) {
  19. error_log("normalizeMetadata: Invalid key type - expected string. Key: " . $key);
  20. continue; // Skip invalid key
  21. }
  22. // Defensive check: Ensure value is not null or undefined
  23. if ($value === null || $value === undefined) {
  24. error_log("normalizeMetadata: Invalid value - cannot be null or undefined. Key: " . $key);
  25. $normalizedMetadata[$key] = null; // or skip, depending on requirements
  26. continue;
  27. }
  28. // Normalize data types: attempt to cast to string, integer, or float
  29. $normalizedValue = $value;
  30. //Try to cast to string
  31. if (!is_string($normalizedValue)) {
  32. $normalizedValue = (string)$normalizedValue;
  33. }
  34. //Try to cast to integer
  35. if (!is_int($normalizedValue) && is_numeric($normalizedValue)) {
  36. $normalizedValue = (int)$normalizedValue;
  37. }
  38. //Try to cast to float
  39. if (!is_float($normalizedValue) && is_numeric($normalizedValue)) {
  40. $normalizedValue = (float)$normalizedValue;
  41. }
  42. $normalizedMetadata[$key] = $normalizedValue;
  43. }
  44. return $normalizedMetadata;
  45. }
  46. //Example usage & testing
  47. if (count($argv) > 1) {
  48. $inputData = json_decode($argv[1], true);
  49. $normalizedData = normalizeMetadata($inputData);
  50. if (!empty($normalizedData)) {
  51. echo json_encode($normalizedData, JSON_PRETTY_PRINT) . PHP_EOL;
  52. } else {
  53. echo "Normalization failed." . PHP_EOL;
  54. }
  55. } else {
  56. $testData = [
  57. "timestamp" => "2023-10-27 10:00:00",
  58. "count" => "123",
  59. "value" => 3.14,
  60. "flag" => true,
  61. "description" => null,
  62. "invalidKey" => 123
  63. ];
  64. $normalizedData = normalizeMetadata($testData);
  65. echo json_encode($normalizedData, JSON_PRETTY_PRINT) . PHP_EOL;
  66. }
  67. ?>

Add your comment