1. <?php
  2. /**
  3. * Aggregates date values and handles potential errors.
  4. *
  5. * @param array $dates An array of date strings in 'YYYY-MM-DD' format.
  6. * @return array An associative array with the count of each date. Returns an empty array on error.
  7. */
  8. function aggregateDates(array $dates): array
  9. {
  10. $dateCounts = [];
  11. foreach ($dates as $dateString) {
  12. // Validate the date format
  13. if (!preg_match('/^\d{4}-\d{2}-\d{2}$/', $dateString)) {
  14. echo "Error: Invalid date format - " . $dateString . "\n";
  15. return []; // Return empty array on error
  16. }
  17. // Check if the date is valid (optional, but recommended)
  18. if (checkdate(intval(substr($dateString, 0, 4)), intval(substr($dateString, 5, 2)), intval(substr($dateString, 8, 2)))) {
  19. if (isset($dateCounts[$dateString])) {
  20. $dateCounts[$dateString]++;
  21. } else {
  22. $dateCounts[$dateString] = 1;
  23. }
  24. } else {
  25. echo "Error: Invalid date - " . $dateString . "\n";
  26. return []; // Return empty array on error
  27. }
  28. }
  29. return $dateCounts;
  30. }
  31. // Example Usage
  32. $dateArray = ["2023-10-26", "2023-10-27", "2023-10-26", "2023-10-28", "invalid-date", "2023-10-27"];
  33. $aggregatedDates = aggregateDates($dateArray);
  34. if (!empty($aggregatedDates)) {
  35. echo "<pre>";
  36. print_r($aggregatedDates);
  37. echo "</pre>";
  38. }
  39. ?>

Add your comment