1. <?php
  2. /**
  3. * Flags anomalies in CLI arguments.
  4. *
  5. * @param array $args Array of command-line arguments.
  6. * @param array $expected_types Associative array of argument names and expected data types.
  7. * @param array $expected_values Associative array of argument names and expected values.
  8. * @return array Array of flagged anomalies.
  9. */
  10. function flagArgumentAnomalies(array $args, array $expected_types, array $expected_values): array
  11. {
  12. $anomalies = [];
  13. foreach ($expected_types as $arg_name => $expected_type) {
  14. if (!isset($args[$arg_name])) {
  15. $anomalies[] = "Missing argument: {$arg_name}";
  16. continue; // Skip to the next argument
  17. }
  18. $arg_value = $args[$arg_name];
  19. if (is_array($expected_type)) {
  20. //Allow multiple expected values
  21. if(!in_array($arg_value, $expected_type)){
  22. $anomalies[] = "Argument {$arg_name} has unexpected value: {$arg_value}. Expected: " . implode(", ", $expected_type);
  23. }
  24. } else {
  25. if (!is_scalar($arg_value)) {
  26. $anomalies[] = "Argument {$arg_name} has incorrect type. Expected: {$expected_type}, Actual: " . gettype($arg_value);
  27. } elseif ($arg_value !== $expected_values[$arg_name]) {
  28. $anomalies[] = "Argument {$arg_name} has incorrect value. Expected: {$expected_values[$arg_name]}, Actual: {$arg_value}";
  29. }
  30. }
  31. }
  32. return $anomalies;
  33. }
  34. // Example usage (for testing)
  35. /*
  36. $args = ['name' => 'John Doe', 'age' => 30, 'city' => 'New York'];
  37. $expected_types = ['name' => 'string', 'age' => 'int', 'city' => 'string'];
  38. $expected_values = ['name' => 'John Doe', 'age' => 30, 'city' => 'New York'];
  39. $anomalies = flagArgumentAnomalies($args, $expected_types, $expected_values);
  40. if (!empty($anomalies)) {
  41. echo "Anomalies found:\n";
  42. foreach ($anomalies as $anomaly) {
  43. echo "- " . $anomaly . "\n";
  44. }
  45. } else {
  46. echo "No anomalies found.\n";
  47. }
  48. */
  49. ?>

Add your comment