<?php
/**
* Deserializes command-line options and performs basic validation.
*
* @param array $argv Array of command-line arguments.
* @return array Associative array of validated options. Returns an empty array on error.
*/
function deserializeOptions(array $argv): array
{
$options = [];
$valid = true;
// Use array_filter to process options. Ignore script name and path.
$optionArgs = array_filter($argv, function ($arg) {
return $arg !== $argv[0] && strpos($arg, '-') === 0;
});
foreach ($optionArgs as $arg) {
// Split the option into name and value
$parts = explode('=', $arg, 2);
if (count($parts) !== 2) {
echo "Error: Invalid option format: $arg\n";
$valid = false;
continue; //skip to next option
}
$optionName = strtolower($parts[0]);
$optionValue = trim($parts[1]);
// Basic validation based on option name
switch ($optionName) {
case 'name':
if (empty($optionValue)) {
echo "Error: Option --name requires a value.\n";
$valid = false;
break;
}
$options['name'] = $optionValue;
break;
case 'age':
if (!is_numeric($optionValue)) {
echo "Error: Option --age requires a numeric value.\n";
$valid = false;
break;
}
$age = (int)$optionValue;
if ($age < 0 || $age > 150) {
echo "Error: Option --age must be between 0 and 150.\n";
$valid = false;
break;
}
$options['age'] = $age;
break;
case 'email':
if (!filter_var($optionValue, FILTER_VALIDATE_EMAIL)) {
echo "Error: Option --email is not a valid email address.\n";
$valid = false;
break;
}
$options['email'] = $optionValue;
break;
default:
echo "Error: Unknown option: $optionName\n";
$valid = false;
break;
}
}
if (!$valid) {
return []; // Return empty array if any error occurred.
}
return $options;
}
?>
Add your comment